什么是timer_t在它的基础上?

val*_*ica 5 types timer posix-api

Gcc并printf说这timer_t是指针(在我身上linux).但是这个指针放置了什么,并且是NULL一个有效的计时器ID?

此外,它是特定于平台的东西,例如它是指针on linux,int on macOs,sth.别的BSD.

rob*_*at2 5

你在谈论用户空间还是内核空间?它甚至在单一平台上也有所不同.真的,它归结为函数的实现,它应该被认为是不透明的.

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

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

如果你看一下单一Unix规范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;
Run Code Online (Sandbox Code Playgroud)

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 *
Run Code Online (Sandbox Code Playgroud)

Solaris标头(通过GCC)(int):

#ifndef _TIMER_T
#define _TIMER_T
typedef int timer_t;    /* timer identifier type */  <typedef:timer_t>
#endif  /* ifndef _TIMER_T */
Run Code Online (Sandbox Code Playgroud)