我想用

#include <time.h>
clock_gettime(CLOCK_TAI, &...);

但遗憾的是 CLOCK_TAI 未在库存time.h头文件中定义(至少在openSUSE 13.2中) . 但它在linux / time.h中定义,实际上是由操作系统支持的 . 但是,如果我包含后一个 Headers ,它会引发一堆声明冲突 - 与time.h和bits / types.h相比 . 只包含linux / time.h没有用,因为无论如何,time.h和/或bits / types.h将被unistd.h或stdlib.h隐含地包含在公共头文件中 .


所以我尝试手动解决冲突 . 特别是,第一个编译器错误消息是关于 timespec 重新声明,所以我在我的代码中写道:

#include <time.h>
#if defined(__timespec_defined) && !defined(_STRUCT_TIMESPEC)
    #define _STRUCT_TIMESPEC
#endif
#include <linux/time.h>

它起作用,但并非没有与 itimerspec 重新声明的另一个冲突,它在两个 Headers 中都是无条件宣告的,并没有与任何包含守卫的定义结束 . 所以我决定完全禁止隐含的time.h包含:

#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif

这继续与编译器抱怨 timeval 重新声明 . 所以我也禁止了隐含的bits / types.h包含:

#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif
#ifndef _BITS_TYPES_H
    #define _BITS_TYPES_H
#endif

好吧,但是这也删除了重要的基本声明,基于 size_t 这样的常见类型 . 所以我试图向相反的方向发展并禁用linux / types.h包含:

#ifndef _LINUX_TYPES_H
    #define _LINUX_TYPES_H
#endif
#include <linux/time.h>
#ifndef _TIME_H
    #define _TIME_H
#endif

正如你猜测的那样,它导致系统特定的类型如 __kernel_time_t 缺失,导致无法声明 timespec 等等 .


因此,我想知道:是否可以将linux / ... Headers 与stdlib.h和其他常用文件结合使用?是否有其他方法可以访问特定于系统的 CLOCK_TAI 值?