Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is timer_t at its base?

Gcc and printf says that timer_t is pointer (on my linux). But what is placed by this pointer, and is NULL a valid timer id?

Also, is it platform-specific thing, e. g. it is pointer on linux, int on macOs, sth. else on BSD.

like image 722
val is still with Monica Avatar asked Mar 26 '17 19:03

val is still with Monica


Video Answer


1 Answers

Are you talking about userspace or kernelspace? It makes a difference even on a single platform. Really it comes down to what the implementation of the functions, which SHOULD be considered as opaque.

The implementation of the functions uses timer_t might use an integer as an offset into an array of data structures, or dynamically allocates the backing timer data structures.

That opaque-ness of the timer functions means that NULL might be valid in some systems but not others.

If you look at the Single Unix Specification for sys/types.h, you'll see while it mentions timer_t, and says "All of the types are defined as arithmetic types of an appropriate length", but doesn't specify what exactly is stored inside the type (since a pointer is really just an integer that happens to be the address of somewhere else in memory).

Linux kernel headers (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 sources/headers (void* pointer):

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 */
like image 101
robbat2 Avatar answered Sep 20 '22 12:09

robbat2