对于我的 Linux 网络应用程序,我指的是lincap.c以了解如何使用 PACKET_MMAP 方法通过环形缓冲区接收以太网数据包。
lincap.c 使用mb()
asm/system.h 中定义的内存屏障宏。但是,该头文件中的代码包含在#ifdef __KERNEL__
. 我想这意味着它是一个内核头文件。如何mb()
从用户空间应用程序(我相信 lincap.c 是)中使用?
BR
大卫
对于我的 Linux 网络应用程序,我指的是lincap.c以了解如何使用 PACKET_MMAP 方法通过环形缓冲区接收以太网数据包。
lincap.c 使用mb()
asm/system.h 中定义的内存屏障宏。但是,该头文件中的代码包含在#ifdef __KERNEL__
. 我想这意味着它是一个内核头文件。如何mb()
从用户空间应用程序(我相信 lincap.c 是)中使用?
BR
大卫
也许您可以使用__sync_synchronize
内置的 gcc 提供。我不确定它是否生成完全相同的代码,但它应该在效果上足够相似。因此,只需将其定义mb
为别名即可。