timer_t 的底是什么?

What is timer_t at its base?

Gcc 和 printftimer_t 是指针(在我的 linux 上)。但是这个指针放置了什么,NULL 是一个有效的定时器 id 吗?

此外,它是特定于平台的东西,例如。 G。它是 linux 上的指针,macOs 上的 int,等等。其他 BSD.

你说的是用户空间还是内核空间?即使在单一平台上,它也会有所不同。真的归结为函数的实现,哪些应该被认为是不透明的。

函数的实现使用 timer_t 可能使用整数作为数据结构数组的偏移量,或者动态分配后备计时器数据结构。

计时器函数的不透明性意味着 NULL 可能在某些系统中有效,但在其他系统中无效。

如果您查看 sys/types.h 的单一 Unix 规范,您会看到它提到 timer_t,并说 "All of the types are defined as arithmetic types of an appropriate length",但没有具体说明存储的内容在类型内部(因为指针实际上只是一个整数,恰好是内存中其他地方的地址)。

Linux 内核头文件 (int):

include/linux/types.h:typedef __kernel_timer_t  timer_t;
include/uapi/asm-generic/posix_types.h:typedef int      __kernel_timer_t;

Linux glibc sources/headers(void* 指针):

time/bits/types/timer_t.h:typedef __timer_t timer_t;
bits/types.h:__STD_TYPE __TIMER_T_TYPE __timer_t;
sysdeps/unix/sysv/linux/x86/bits/typesizes.h:#define __TIMER_T_TYPE     void *
sysdeps/unix/sysv/linux/sparc/bits/typesizes.h:#define __TIMER_T_TYPE       void *
sysdeps/unix/sysv/linux/s390/bits/typesizes.h:#define __TIMER_T_TYPE        void *
sysdeps/unix/sysv/linux/generic/bits/typesizes.h:#define __TIMER_T_TYPE     void *
sysdeps/unix/sysv/linux/alpha/bits/typesizes.h:#define __TIMER_T_TYPE       void *
sysdeps/nacl/bits/typesizes.h:#define __TIMER_T_TYPE        void *
sysdeps/mach/hurd/bits/typesizes.h:#define __TIMER_T_TYPE       __S32_TYPE
bits/typesizes.h:#define __TIMER_T_TYPE     void *

Solaris headers (via GCC) (int):

#ifndef _TIMER_T
#define _TIMER_T
typedef int timer_t;    /* timer identifier type */  <typedef:timer_t>
#endif  /* ifndef _TIMER_T */