Gccとprintf
は、timer_t
がポインタ(私のlinux
)であると言います。しかし、このポインタによって何が配置され、NULL
は有効なタイマーIDですか?ベースにあるtimer_tとは何ですか?
また、プラットフォーム固有のものですか? g。 linux
のポインタ、macOs
のint、sthです。 else on BSD
。
Gccとprintf
は、timer_t
がポインタ(私のlinux
)であると言います。しかし、このポインタによって何が配置され、NULL
は有効なタイマーIDですか?ベースにあるtimer_tとは何ですか?
また、プラットフォーム固有のものですか? g。 linux
のポインタ、macOs
のint、sthです。 else on BSD
。
あなたはユーザスペースかカーネルスペースについて話していますか? 1つのプラットフォームでも違いがあります。本当にそれは関数の実装がどのようなものになるのか、それは不透明であると考えられるべきです。
関数の実装では、データ構造の配列へのオフセットとして整数を使用したり、バッキングタイマーのデータ構造を動的に割り当てることができます。
タイマー機能の不透明さは、NULLが一部のシステムでは有効であるが、他のシステムでは有効でない可能性があることを意味します。
sys/types.h
のSingle Unix Specificationを見ると、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 headers (via GCC)(int
):
#ifndef _TIMER_T
#define _TIMER_T
typedef int timer_t; /* timer identifier type */ <typedef:timer_t>
#endif /* ifndef _TIMER_T */