queue

Autres langues

Langue: ja

Autres versions - même langue

Version: 54751 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)


BSD mandoc
4BSD

̾Á°

LIST_ENTRY LIST_HEAD LIST_INIT LIST_INSERT_AFTER LIST_INSERT_HEAD LIST_REMOVE TAILQ_ENTRY TAILQ_HEAD TAILQ_INIT TAILQ_INSERT_AFTER TAILQ_INSERT_HEAD TAILQ_INSERT_TAIL TAILQ_REMOVE CIRCLEQ_ENTRY CIRCLEQ_HEAD CIRCLEQ_INIT CIRCLEQ_INSERT_AFTER CIRCLEQ_INSERT_BEFORE CIRCLEQ_INSERT_HEAD CIRCLEQ_INSERT_TAIL CIRCLEQ_REMOVE - ¥ê¥¹¥È¡¦¥Æ¡¼¥ë (tail) ¥­¥å¡¼¡¦½Û´Ä¥­¥å¡¼¤Î¼ÂÁõ

½ñ¼°

Fd #include <sys/queue.h> Fn LIST_ENTRY TYPE Fn LIST_HEAD HEADNAME TYPE Fn LIST_INIT LIST_HEAD *head Fn LIST_INSERT_AFTER LIST_ENTRY *listelm TYPE *elm LIST_ENTRY NAME Fn LIST_INSERT_HEAD LIST_HEAD *head TYPE *elm LIST_ENTRY NAME Fn LIST_REMOVE TYPE *elm LIST_ENTRY NAME Fn TAILQ_ENTRY TYPE Fn TAILQ_HEAD HEADNAME TYPE Fn TAILQ_INIT TAILQ_HEAD *head Fn TAILQ_INSERT_AFTER TAILQ_HEAD *head TYPE *listelm TYPE *elm TAILQ_ENTRY NAME Fn TAILQ_INSERT_HEAD TAILQ_HEAD *head TYPE *elm TAILQ_ENTRY NAME Fn TAILQ_INSERT_TAIL TAILQ_HEAD *head TYPE *elm TAILQ_ENTRY NAME Fn TAILQ_REMOVE TAILQ_HEAD *head TYPE *elm TAILQ_ENTRY NAME Fn CIRCLEQ_ENTRY TYPE Fn CIRCLEQ_HEAD HEADNAME TYPE Fn CIRCLEQ_INIT CIRCLEQ_HEAD *head Fn CIRCLEQ_INSERT_AFTER CIRCLEQ_HEAD *head TYPE *listelm TYPE *elm CIRCLEQ_ENTRY NAME Fn CIRCLEQ_INSERT_BEFORE CIRCLEQ_HEAD *head TYPE *listelm TYPE *elm CIRCLEQ_ENTRY NAME Fn CIRCLEQ_INSERT_HEAD CIRCLEQ_HEAD *head TYPE *elm CIRCLEQ_ENTRY NAME Fn CIRCLEQ_INSERT_TAIL CIRCLEQ_HEAD *head TYPE *elm CIRCLEQ_ENTRY NAME Fn CIRCLEQ_REMOVE CIRCLEQ_HEAD *head TYPE *elm CIRCLEQ_ENTRY NAME

ÀâÌÀ

¤³¤ì¤é¤Î¥Þ¥¯¥í¤Ï¡¢¼¡¤Î 3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤òÄêµÁ¤·¤ÆÁàºî¤¹¤ë: ¥ê¥¹¥È¡¦¥Æ¡¼¥ë¥­¥å¡¼¡¦½Û´Ä¥­¥å¡¼¡£ 3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤¹¤Ù¤Æ¤Ë¤ª¤¤¤Æ°Ê²¼¤Îµ¡Ç½¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë:
  1. ¿·¤¿¤Ê¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£
  2. ¿·¤¿¤Ê¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤Î¤É¤ÎÍ×ÁǤè¤ê¤â¸å¤ËÁÞÆþ¤¹¤ë¡£
  3. ¥ê¥¹¥È¤ÎǤ°Õ¤Î¥¨¥ó¥È¥ê¤òºï½ü¤¹¤ë¡£
  4. ¥ê¥¹¥È¤ò½çÊý¸þ¤Ëé¤ë¡£

¥ê¥¹¥È¤Ï 3 ¤Ä¤Î¥Ç¡¼¥¿¹½Â¤¤ÎÃæ¤ÇºÇ¤âñ½ã¤Ç¤¢¤ê¡¢ ¾åµ­¤Îµ¡Ç½¤Î¤ß¤ò¥µ¥Ý¡¼¥È¤¹¤ë¡£

¥Æ¡¼¥ë¥­¥å¡¼¤Ï°Ê²¼¤Îµ¡Ç½¤òÄɲ乤ë:

  1. ¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎºÇ¸å¤ËÄɲäǤ­¤ë¡£

¤¿¤À¤·:

  1. Á´¤Æ¤Î¥ê¥¹¥ÈÁÞÆþ¤Èºï½ü¤Ë¤ª¤¤¤Æ¡¢¥ê¥¹¥È¤ÎÀèƬ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
  2. ³ÆÀèƬ¥¨¥ó¥È¥ê¤Ï 1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤òɬÍפȤ¹¤ë¡£
  3. ¥ê¥¹¥È¤ÈÈæ¤Ù¤Æ¡¢¥³¡¼¥É¥µ¥¤¥º¤Ï 15% Â礭¤¯¤Ê¤ê¡¢Áàºî¤Ï 20% ÃÙ¤¯¤Ê¤ë¡£

½Û´Ä¥­¥å¡¼¤Ï°Ê²¼¤Îµ¡Ç½¤òÄɲ乤ë:

  1. ¥¨¥ó¥È¥ê¤ò¥ê¥¹¥È¤ÎºÇ¸å¤ËÄɲäǤ­¤ë¡£
  2. ¥¨¥ó¥È¥ê¤ò¾¤Î¥¨¥ó¥È¥ê¤ÎÁ°¤ËÄɲäǤ­¤ë¡£
  3. µÕÊý¸þ¤ËËöÈø¤«¤éÀèƬ¤Øé¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

¤¿¤À¤·:

  1. Á´¤Æ¤Î¥ê¥¹¥ÈÁÞÆþ¤Èºï½ü¤Ë¤ª¤¤¤Æ¡¢¥ê¥¹¥È¤ÎÀèƬ¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
  2. ³ÆÀèƬ¥¨¥ó¥È¥ê¤Ï 1 ¤Ä¤Ç¤Ï¤Ê¤¯ 2 ¤Ä¤Î¥Ý¥¤¥ó¥¿¤òɬÍפȤ¹¤ë¡£
  3. é¤ëºÝ¤Î½ªÎ»¾ò·ï¤¬¤è¤êÊ£»¨¤Ç¤¢¤ë¡£
  4. ¥ê¥¹¥È¤ÈÈæ¤Ù¤Æ¡¢¥³¡¼¥É¥µ¥¤¥º¤Ï 40% Â礭¤¯¤Ê¤ê¡¢Áàºî¤Ï 45% ÃÙ¤¯¤Ê¤ë¡£

¥Þ¥¯¥íÄêµÁ¤Ë¤ª¤¤¤Æ Fa TYPE ¤Ï¥æ¡¼¥¶ÄêµÁ¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢ LIST_ENTRY TAILQ_ENTRY CIRCLEQ_ENTRY ¤Î²¿¤ì¤«·¿¤Î¥Õ¥£¡¼¥ë¥É¤È »ØÄꤵ¤ì¤¿ Fa NAME ¤ò´Þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ °ú¤­¿ô Fa HEADNAME ¤Ï¥æ¡¼¥¶ÄêµÁ¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢ ¥Þ¥¯¥í LIST_HEAD TAILQ_HEAD CIRCLEQ_HEAD ¤òÍѤ¤¤ÆÀë¸À¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤³¤ì¤é¤Î¥Þ¥¯¥í¤¬¤É¤Î¤è¤¦¤Ë»È¤ï¤ì¤ë¤«¤Ë¤Ä¤¤¤Æ¤Î¹¹¤Ê¤ëÀâÌÀ¤Ï¡¢ °Ê²¼¤ÎÎã¤ò»²¾È¤¹¤ë¤³¤È¡£

¥ê¥¹¥È

¥ê¥¹¥È¤ÎÀèƬ¤Ë¤Ï¡¢ LIST_HEAD ¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£ ¤³¤Î¹½Â¤ÂΤϥꥹ¥È¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤ò 1 ¤Ä´Þ¤à¡£ Í×ÁÇ¤Ï 2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢ Ǥ°Õ¤ÎÍ×ÁǤϥꥹ¥È¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£ ¿·¤·¤¤Í×ÁǤϴû¸¤ÎÍ×ÁǤθå¤Þ¤¿¤Ï¥ê¥¹¥È¤ÎÀèƬ¤ËÄɲäǤ­¤ë¡£ Fa LIST_HEAD ¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤Æ¤¤¤ë:

LIST_HEAD(HEADNAME, TYPE) head;

¤³¤³¤Ç Fa HEADNAME ¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢ Fa TYPE ¤Ï¥ê¥ó¥¯Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£ ¥ê¥¹¥È¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:


struct HEADNAME *headp;

(̾Á° head ¤È headp ¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)

¥Þ¥¯¥í LIST_ENTRY ¤Ï¥ê¥¹¥È¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£

¥Þ¥¯¥í LIST_INIT ¤Ï Fa head ¤Ç»²¾È¤µ¤ì¤ë¥ê¥¹¥È¤ò½é´ü²½¤¹¤ë¡£

¥Þ¥¯¥í LIST_INSERT_HEAD ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤ò¥ê¥¹¥È¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í LIST_INSERT_AFTER ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤òÍ×ÁÇ Fa listelm ¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í LIST_REMOVE ¤ÏÍ×ÁÇ Fa elm ¤ò¥ê¥¹¥È¤«¤éºï½ü¤¹¤ë¡£

¥ê¥¹¥È¤ÎÎã


LIST_HEAD(listhead, entry) head;

struct listhead *headp;         /* ¥ê¥¹¥È¤ÎÀèƬ¡£*/

struct entry {

        ...

        LIST_ENTRY(entry) entries;      /* ¥ê¥¹¥È¡£*/

        ...

} *n1, *n2, *np;



LIST_INIT(&head);                       /* ¥ê¥¹¥È¤ò½é´ü²½¤¹¤ë¡£*/



n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/

LIST_INSERT_HEAD(&head, n1, entries);



n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/

LIST_INSERT_AFTER(n1, n2, entries);

                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/

for (np = head.lh_first; np != NULL; np = np->entries.le_next)

        np-> ...



while (head.lh_first != NULL)           /* ºï½ü¤¹¤ë¡£*/

        LIST_REMOVE(head.lh_first, entries);

¥Æ¡¼¥ë¥­¥å¡¼

¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Ë¤Ï TAILQ_HEAD ¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£ ¤³¤Î¹½Â¤ÂÎ¤Ï 1 ÁȤΥݥ¤¥ó¥¿¤ò´Þ¤ó¤Ç¤¤¤ë¡£ 1 ¤Ä¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ê¡¢ ¤â¤¦ 1 ¤Ä¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎºÇ¸å¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£ Í×ÁÇ¤Ï 2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢ Ǥ°Õ¤ÎÍ×ÁǤϥơ¼¥ë¥­¥å¡¼¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£ ¿·¤·¤¤Í×ÁǤϴû¸¤ÎÍ×ÁǤθå¤Þ¤¿¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Þ¤¿¤ÏËöÈø¤ËÄɲäǤ­¤ë¡£ Fa TAILQ_HEAD ¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:

TAILQ_HEAD(HEADNAME, TYPE) head;

¤³¤³¤Ç HEADNAME ¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢ TYPE ¤Ï¥Æ¡¼¥ë¥­¥å¡¼Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£ ¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:


struct HEADNAME *headp;

(̾Á° head ¤È headp ¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)

¥Þ¥¯¥í TAILQ_ENTRY ¤Ï¥Æ¡¼¥ë¥­¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£

¥Þ¥¯¥í TAILQ_INIT ¤Ï Fa head ¤Ç»²¾È¤µ¤ì¤ë¥Æ¡¼¥ë¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£

¥Þ¥¯¥í TAILQ_INSERT_HEAD ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤ò¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í TAILQ_INSERT_TAIL ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤ò¥Æ¡¼¥ë¥­¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í TAILQ_INSERT_AFTER ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤òÍ×ÁÇ Fa listelm ¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í TAILQ_REMOVE ¤ÏÍ×ÁÇ Fa elm ¤ò¥Æ¡¼¥ë¥­¥å¡¼¤«¤éºï½ü¤¹¤ë¡£

¥Æ¡¼¥ë¥­¥å¡¼¤ÎÎã


TAILQ_HEAD(tailhead, entry) head;

struct tailhead *headp;         /* ¥Æ¡¼¥ë¥­¥å¡¼¤ÎÀèƬ¡£*/

struct entry {

        ...

        TAILQ_ENTRY(entry) entries;     /* ¥Æ¡¼¥ë¥­¥å¡¼¡£*/

        ...

} *n1, *n2, *np;



TAILQ_INIT(&head);                      /* ¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£*/



n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/

TAILQ_INSERT_HEAD(&head, n1, entries);



n1 = malloc(sizeof(struct entry));      /* ËöÈø¤ËÁÞÆþ¤¹¤ë¡£*/

TAILQ_INSERT_TAIL(&head, n1, entries);



n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/

TAILQ_INSERT_AFTER(&head, n1, n2, entries);

                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/

for (np = head.tqh_first; np != NULL; np = np->entries.tqe_next)

        np-> ...

                                        /* ºï½ü¤¹¤ë¡£*/

while (head.tqh_first != NULL)

        TAILQ_REMOVE(&head, head.tqh_first, entries);

½Û´Ä¥­¥å¡¼

½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤Ë¤Ï CIRCLEQ_HEAD ¥Þ¥¯¥í¤ÇÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤ¬ÃÖ¤«¤ì¤ë¡£ ¤³¤Î¹½Â¤ÂÎ¤Ï 1 ÁȤΥݥ¤¥ó¥¿¤ò´Þ¤ó¤Ç¤¤¤ë¡£ 1 ¤Ä¤Ï½Û´Ä¥­¥å¡¼¤ÎºÇ½é¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ê¡¢ ¤â¤¦ 1 ¤Ä¤Ï½Û´Ä¥­¥å¡¼¤ÎºÇ¸å¤ÎÍ×ÁǤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£ Í×ÁÇ¤Ï 2 ½Å¤Ë¥ê¥ó¥¯¤µ¤ì¤Æ¤ª¤ê¡¢ Ǥ°Õ¤ÎÍ×ÁǤϥ­¥å¡¼¤òé¤é¤º¤Ëºï½ü¤Ç¤­¤ë¡£ ¿·¤·¤¤Í×ÁǤϡ¢´û¸¤ÎÍ×ÁǤθå¤Þ¤¿¤ÏÁ°¡¢¤Þ¤¿¤Ï¥­¥å¡¼¤ÎÀèƬ¤Þ¤¿¤ÏËöÈø¤ËÄɲäǤ­¤ë¡£ A Fa CIRCLEQ_HEAD ¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:

CIRCLEQ_HEAD(HEADNAME, TYPE) head;

¤³¤³¤Ç HEADNAME ¤ÏÄêµÁ¤µ¤ì¤ë¹½Â¤ÂΤÎ̾Á°¤Ç¤¢¤ê¡¢ TYPE ¤Ï½Û´Ä¥­¥å¡¼Æâ¤Ç¥ê¥ó¥¯¤µ¤ì¤ëÍ×ÁǤη¿¤Ç¤¢¤ë¡£ ½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ï¡¢¤½¤Î¸å¤Ç¼¡¤Î¤è¤¦¤ËÀë¸À¤µ¤ì¤ë:


struct HEADNAME *headp;

(̾Á° head ¤È headp ¤Ï¥æ¡¼¥¶¤¬ÁªÂò¤Ç¤­¤ë¡£)

¥Þ¥¯¥í CIRCLEQ_ENTRY ¤Ï½Û´Ä¥­¥å¡¼¤ÎÍ×ÁǤòÀܳ¤¹¤ë¹½Â¤ÂΤòÀë¸À¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_INIT ¤Ï Fa head ¤Ç»²¾È¤µ¤ì¤ë½Û´Ä¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_INSERT_HEAD ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤ò½Û´Ä¥­¥å¡¼¤ÎÀèƬ¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_INSERT_TAIL ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤ò½Û´Ä¥­¥å¡¼¤ÎËöÈø¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_INSERT_AFTER ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤òÍ×ÁÇ Fa listelm ¤Î¸å¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_INSERT_AFTER ¤Ï¿·¤¿¤ÊÍ×ÁÇ Fa elm ¤òÍ×ÁÇ Fa listelm ¤ÎÁ°¤ËÁÞÆþ¤¹¤ë¡£

¥Þ¥¯¥í CIRCLEQ_REMOVE ¤ÏÍ×ÁÇ Fa elm ¤ò½Û´Ä¥­¥å¡¼¤«¤éºï½ü¤¹¤ë¡£

½Û´Ä¥­¥å¡¼¤ÎÎã


CIRCLEQ_HEAD(circleq, entry) head;

struct circleq *headp;                  /* ½Û´Ä¥­¥å¡¼¤ÎÀèƬ¡£*/

struct entry {

        ...

        CIRCLEQ_ENTRY(entry) entries;           /* ½Û´Ä¥­¥å¡¼¡£*/

        ...

} *n1, *n2, *np;



CIRCLEQ_INIT(&head);                    /* ½Û´Ä¥­¥å¡¼¤ò½é´ü²½¤¹¤ë¡£*/



n1 = malloc(sizeof(struct entry));      /* ÀèƬ¤ËÁÞÆþ¤¹¤ë¡£*/

CIRCLEQ_INSERT_HEAD(&head, n1, entries);



n1 = malloc(sizeof(struct entry));      /* ËöÈø¤ËÁÞÆþ¤¹¤ë¡£*/

CIRCLEQ_INSERT_TAIL(&head, n1, entries);



n2 = malloc(sizeof(struct entry));      /* ¸å¤í¤ËÁÞÆþ¤¹¤ë¡£*/

CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);



n2 = malloc(sizeof(struct entry));      /* Á°¤ËÁÞÆþ¤¹¤ë¡£*/

CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);

                                        /* ½çÊý¸þ¤Ëé¤ë¡£*/

for (np = head.cqh_first; np != (void *)&head; np = np->entries.cqe_next)

        np-> ...

                                        /* µÕÊý¸þ¤Ëé¤ë¡£*/

for (np = head.cqh_last; np != (void *)&head; np = np->entries.cqe_prev)

        np-> ...

                                        /* ºï½ü¤¹¤ë¡£*/

while (head.cqh_first != (void *)&head)

        CIRCLEQ_REMOVE(&head, head.cqh_first, entries);

½àµò

POSIX.1-2001 ¤Ë¤Ï¤Ê¤¤¡£ BSD ·Ï¤Ë¸ºß¤¹¤ë¡£ queue ´Ø¿ô¤Ï BSD 4.4 ¤Ç½é¤á¤ÆÅо줷¤¿¡£