2017-03-26 6 views
3

Gcc와 printftimer_t이 포인터라고합니다 (내 linux에 있음). 하지만이 포인터에 의해 무엇이 배치되고 NULL은 유효한 타이머 ID입니까?기지에 timer_t 란 무엇입니까?

또한 플랫폼 별 문제입니까? 지. 그것은 포인터 linux에, macOs, sth에 int입니다. else on BSD.

답변

4

사용자 공간 또는 커널 공간에 대해 이야기하고 있습니까? 단일 플랫폼에서도 차이가 있습니다. 실제로 그것은 함수의 구현에 따라 달라지며, 이는 불투명하다고 간주되어야합니다.

timer_t 함수의 구현은 데이터 구조의 배열에 대한 오프셋으로 정수를 사용하거나 동적으로 백업 타이머 데이터 구조를 할당 할 수 있습니다.

타이머 기능의 불투명도는 NULL이 일부 시스템에서는 유효하지만 다른 시스템에서는 유효하지 않을 수 있음을 의미합니다.

sys/types.h에 대한 단일 유닉스 사양을 보면 timer_t이 나와 있고 "모든 유형이 적절한 길이의 산술 유형으로 정의되어 있습니다"라고되어 있지만 정확히 무엇인지는 명시하지 않습니다. 포인터는 실제로는 메모리 내의 다른 곳의 주소 일 뿐이므로 정수형 내부에 저장됩니다.

리눅스 커널 헤더 (int) :

include/linux/types.h:typedef __kernel_timer_t timer_t; 
include/uapi/asm-generic/posix_types.h:typedef int  __kernel_timer_t; 

리눅스의 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 */