在哪里可以找到Linux版本sys/queue.h头文件?

在哪里可以找到Linux版本sys/queue.h头文件?,linux,queue,diff,bsd,Linux,Queue,Diff,Bsd,sys/queue.h首次出现在4.4BSD中。Linux已经将其包含在发行版中,但版本似乎不是最新的 实现单链接列表、单链接尾部队列、列表和尾部队列。实现列表、尾部队列和循环队列 我在我的Ubuntu PC中安装了libbsd dev包,然后在/usr/include/BSD/sys/queue.h中找到了BSD版本的sys/queue.h 我的问题是: 在哪里可以找到此头文件的Linux版本 这两种实现之间的主要区别是什么?Linux版本只是过时的BSD版本吗 他们有着相同的祖先,但看起来

sys/queue.h
首次出现在4.4BSD中。Linux已经将其包含在发行版中,但版本似乎不是最新的

实现单链接列表、单链接尾部队列、列表和尾部队列。实现列表、尾部队列和循环队列

我在我的Ubuntu PC中安装了libbsd dev包,然后在
/usr/include/BSD/sys/queue.h
中找到了BSD版本的
sys/queue.h

我的问题是:

  • 在哪里可以找到此头文件的Linux版本

  • 这两种实现之间的主要区别是什么?Linux版本只是过时的BSD版本吗


他们有着相同的祖先,但看起来他们的任何发展在很久以前就已经分化了


如果你想在你的项目中使用它,你最好的选择就是把你最喜欢的复制到你的项目中并使用它。不要依赖于为您提供它的系统。它只是一个包含大量宏的头文件,不需要库或任何依赖项即可工作,因此根本不是特定于操作系统的。我通常在我的项目中使用OpenBSD的版本。

看起来Linux的版本已经严重过时了。自2001年以来,CIRCLEQ在BSD中(相当强烈地)被弃用,甚至从文档中删除了它,即使实现仍然在queue.h中。我们应该使用TAILQ,它提供相同的功能,具有更好的性能/更少的问题/更合理的实现

同时,在Linux中,它甚至还有文档记录,但是您可以在引用BSD不推荐的情况下,在从CIRCLEQ迁移到TAILQ的kconfig中找到更改


CIRCLEQ中的具体问题似乎是它使用了一个特定的头,与列表节点不同,但它无论如何都链接为一个节点;因此,必须在每个节点访问时保持并检查头部指针,以查看节点是否为头部。因此有两个问题:每次访问时的检查,以及需要将头指针放在手边,获取寄存器或缓存。

您可以在
/usr/include/i386 linux gnu/sys/queue.h下找到它。
位置取决于您的分布。在我的Debian system queue.h中,您可以在以下位置找到OpenBSD文件包: