- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有人可以提供 Linux 系统库中 TAILQ 用法的最小示例,并在 c 中进行解释,可以在 Linux 中使用 gcc 进行编译吗?
最佳答案
TAILQ_ENTRY
宏用于建立用于将项目插入列表的指针。您将其放入要列出的结构中。
struct foo {
TAILQ_ENTRY(foo) tailq;
int datum;
/* ... */
};
TAILQ_HEAD
用于定义一个结构,该结构将充当链接列表元素的容器。您为它提供一个结构名称,以及它将包含的类型的名称。
TAILQ_HEAD(fooq, foo);
使用 TAILQ_INIT
初始化列表容器的实例。
struct fooq q;
TAILQ_INIT(&q);
使用 TAILQ_INSERT_*
宏添加元素。
struct foo data[3] = { foo(3), foo(7), foo(1) };
TAILQ_INSERT_HEAD(&q, &data[0], tailq);
TAILQ_INSERT_AFTER(&q, &data[0], &data[1], tailq);
TAILQ_INSERT_TAIL(&q, &data[2], tailq);
您可以使用TAILQ_FOREACH
和TAILQ_FOREACH_REVERSE
遍历列表。
struct foo *p;
TAILQ_FOREACH(p, &q, tailq) {
printf(" %d", p->datum);
}
puts("");
如果您想在删除所有元素的同时遍历列表,使用 while 循环并使用 TAILQ_EMPTY
和 TAILQ_FIRST
宏可能更容易。
while (!TAILQ_EMPTY(&q)) {
p = TAILQ_FIRST(&q);
TAILQ_REMOVE(&q, p, tailq);
/* ... */
}
上面的代码大部分是从我在 IDEONE 上编写和测试的一个例子中逐字提取的。 .
关于c - <sys/queue.h> 库中 TAILQ 用法的最小示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22315213/
我有一个维护结构列表的应用程序,这些结构由 TAILQ 链接在一起。每个结构都有一个脏位,并指向内存中一些专用的特殊页面。我需要知道是否有人写入了这些页面中的任何一个,所以我将它们mprotect 到
以下代码是较大代码库中问题的最小示例。它可以通过简单的 gcc -g main.c 编译。 我有一个项目列表,每个项目都有一个属性列表。目标是从某些输入解析列表,并且为了只在列表中完全解析项目,它使用
我有一个包含此结构的 100k+ 条目的 tailq: struct entry { char *file_name; FILE *file; TAILQ_ENTRY(entry) tailq; };
我依稀记得 TAILQ_SPLICE() 或meritt的门控源代码中的此类函数提供了此类功能。谷歌搜索没有找到任何此类引用。 BSD和linux中的sys/queue.h似乎都没有这样的东西。 我有
有人可以提供 Linux 系统库中 TAILQ 用法的最小示例,并在 c 中进行解释,可以在 Linux 中使用 gcc 进行编译吗? 最佳答案 TAILQ_ENTRY 宏用于建立用于将项目插入列表的
我正在构建一个依赖队列的小文件实用程序,但在编译时出现错误: error: request for member "entries" in something not a structure or u
我是一名优秀的程序员,十分优秀!