CIRCLEQ_PREV is a Linux utility used for manipulating circular doubly linked lists in C programs. It returns the previous node in the circular queue.


#include <sys/queue.h>
CIRCLEQ_PREV(node, type, field_name);


  • node is the current node of the circular queue.
  • type is the data type of the nodes.
  • field_name is the name of the field within the node that contains the pointer to the next node.


This command does not have any configurable options or flags.


To get the previous node in a circular queue:

struct node {
    CIRCLEQ_ENTRY(node) entries;
    int data;

CIRCLEQ_HEAD(queue_head, node);

struct queue_head *queue = ...;
struct node *current_node = ...;

struct node *previous_node = CIRCLEQ_PREV(current_node, node, entries);

Common Issues

  • Type mismatch: Ensure that the type specified in the CIRCLEQ_PREV macro matches the actual data type of the nodes.
  • Invalid node: Verify that the current_node argument is a valid node within the circular queue.


CIRCLEQ_PREV can be used in conjunction with other circular queue operations, such as CIRCLEQ_INSERT_BEFORE and CIRCLEQ_REMOVE. This allows for complex circular queue manipulations and data processing.

Related Commands

  • CIRCLEQ_FIRST: Return the first node in the circular queue.
  • CIRCLEQ_LAST: Return the last node in the circular queue.
  • CIRCLEQ_NEXT: Return the next node in the circular queue.
  • CIRCLEQ_INSERT_BEFORE: Insert a node before the specified node in the circular queue.
  • CIRCLEQ_REMOVE: Remove a node from the circular queue.