【发布时间】:2013-12-24 11:01:36
【问题描述】:
我正在编写一个包含/usr/include/linux/time.h 和/usr/include/stdlib.h. 的程序
问题是:
stdlib.h包括/usr/include/time.h,它定义了'struct timespec',/usr/include/linux/time.h也定义了一个。这引入了重新定义的编译错误。
我检查了这两个头文件中'struct timespec' 的定义:
在 /usr/include/time.h:
struct timespec
{
__time_t tv_sec; /* Seconds. */
long int tv_nsec; /* Nanoseconds. */
};
在 /usr/include/linux/time.h:
struct timespec {
__kernel_time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
看来这些定义确实是等价的,但我无法证明。
我的问题是:有没有一种可靠的方法来解决这个重新定义?
也非常感谢您提供有关此问题的讨论链接。谢谢。
【问题讨论】:
-
我认为你错误地包含了两个标题:
/usr/include/linux/time.h似乎是用于内核模块的。 -
为什么要包含
<linux/time.h>??? -
@Liviu 感谢您的关注。我的程序正在尝试通过利用 Linux 本机 AIO 在磁盘和网络 io 之间以协作优先级进行多路复用。等它稳定后,我会在 github 上发布它。看来要使用AIO接口,头文件是免不了的。你觉得怎么样?
-
@alk 感谢您的关注。请看我上面的评论。我说的对吗?
-
@Hatrick 不是 Linux 专家,但我认为如果您构建内核模块,则包含“/usr/include/linux/time.h”,否则包含“/usr/include/时间.h”。这不是关于某个界面,而是关于包含两个不同用途的标头。
标签: c linux linux-kernel