Tail queue 使用例子:
test1.c
#include <stdio.h>
#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 <stdio.h>
#include <stdlib.h>
#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);
}
linux queue 用法
最新推荐文章于 2025-04-19 10:18:53 发布