Gcc 并printf
说这timer_t
是指针(在我的linux
)。但是这个指针放置了什么,并且是NULL
一个有效的计时器ID?
另外,它是特定于平台的东西,例如它是指针 on linux
, int on macOs
,……。其他上BSD
。
你说的是用户空间还是内核空间?即使在单个平台上,它也会有所作为。真正归结为功能的实现,应该被认为是不透明的。
函数使用的实现timer_t
可能使用整数作为数据结构数组的偏移量,或动态分配后备计时器数据结构。
计时器函数的不透明性意味着 NULL 可能在某些系统中有效,但在其他系统中无效。
如果您查看 Single Unix Specification for sys/types.h
,您会看到它提到timer_t
,并说“所有类型都定义为适当长度的算术类型”,但没有指定类型中存储的确切内容(因为指针实际上只是一个整数,恰好是内存中其他地方的地址)。
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 源/头文件(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 标头(通过 GCC)(int
):
#ifndef _TIMER_T
#define _TIMER_T
typedef int timer_t; /* timer identifier type */ <typedef:timer_t>
#endif /* ifndef _TIMER_T */