linux queue 用法

Tail queue 使用例子:
test1.c

#include 
#include "queue.h"


#define REPEAT 500
#define NOBJECTS 1000000

// 在程序中如果我们想使用queue.h中提供的东西来
// 简便地将自己的数据存储在队列中,就要定义如下的结构体:
// 结构体中前面几项是自己的数据,最后一项是 TAILQ_ENTRY(..)...
// 当然,如果最后一项根据自己选择的队列类型也可以是
// SLIST_ENTRY或LIST_ENTRY或SIMPLEQ_ENTRY或CIRCLEQ_ENTRY
struct object{
    char anything[7]; // 这里我们自己的数据很简单,是字符数组
    TAILQ_ENTRY(object) tailq_entry;
};



struct object objects[NOBJECTS]; 

TAILQ_HEAD(,object) the_tailq;   // 定义TAILQ队列头(definations)
TAILQ_INIT(&the_tailq);          // 初始化TAILQ队列头(functions)

static void test_tailq(){
    int t;
    puts("Testing TAILQ...");
    for (t = 0; t < REPEAT; t++) {
        int i;

        for (i = 0; i < NOBJECTS; i++) {
            TAILQ_INSERT_TAIL(&the_tailq, objects+i, tailq_entry);
        }
        for (i = 0; i < NOBJECTS; i++) {
            TAILQ_REMOVE_HEAD(&the_tailq, tailq_entry);
        }
    }
}


int main(){

    test_stailq();

    return 0;
}

test2.c

#include   
#include   
#include "queue.h"  
  
struct QUEUE_ITEM{  
    int value;  
    TAILQ_ENTRY(QUEUE_ITEM) entries;  
};  
TAILQ_HEAD(,QUEUE_ITEM) queue_head;  
int main(int argc,char **argv){  
    struct QUEUE_ITEM *item;  
    struct QUEUE_ITEM *tmp_item;  
  
    TAILQ_INIT(&queue_head);  
    int i=0;  
    for(i=5;i<10;i+=2){  
        item=malloc(sizeof(item));  
        item->value=i;  
        TAILQ_INSERT_TAIL(&queue_head, item, entries);  
    }  
      
    struct QUEUE_ITEM *ins_item;  
    ins_item=malloc(sizeof(ins_item));  
  
    ins_item->value=100;  
    TAILQ_INSERT_BEFORE(item,ins_item,entries);  
  
  
    tmp_item=TAILQ_FIRST(&queue_head);  
    printf("first element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
    tmp_item=TAILQ_NEXT(tmp_item,entries);  
    printf("next element is %d\n",tmp_item->value);  
  
}  

你可能感兴趣的:(c/c++)