timer_t在其基础上是什么?

7

Gcc和printf指出在我的linux上,timer_t是指针。但是这个指针指向什么,而且NULL是否为有效的计时器ID?

此外,它是否是平台特定的事情,例如在linux上是指针,在macOs上是整数,在BSD上是其他类型。

1个回答

7
您是在讨论用户空间还是内核空间?即使在单个平台上也会有所不同。实际上,这取决于函数的实现方式,这些函数应该被视为不透明。
使用timer_t的函数的实现可能将整数用作数据结构数组中的偏移量,或者动态分配支持定时器的数据结构。
计时器函数的不透明性意味着在某些系统中,NULL可能是有效的,而在其他系统中则不然。
如果您查看sys/types.h的Single Unix规范,您会发现它提到了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 */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接