2017-03-26 2 views
3

Gccとprintfは、timer_tがポインタ(私のlinux)であると言います。しかし、このポインタによって何が配置され、NULLは有効なタイマーIDですか?ベースにあるtimer_tとは何ですか?

また、プラットフォーム固有のものですか? g。 linuxのポインタ、macOsのint、sthです。 else on BSD

答えて

4

あなたはユーザスペースかカーネルスペースについて話していますか? 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 */ 
関連する問題