pid_t类型在Linux环境编程中用于定义进程ID,需要引入头文件<sys/types.h>
,首先看一下头文件/usr/include/sys/types.h
中关于pid_t的定义。
#ifndef __pid_t_defined
typedef __pid_t pid_t;
# define __pid_t_defined
#endif
可见pid_t
等同于__pid_t
,继续寻找__pid_t
的定义。
头文件<sys/types.h>
中包含了头文件<bits/types.h>
,根据名称可见与类型的定义相关,我们在头文件<bits/types.h>
中找到了__pid_t
的定义如下:
#if __WORDSIZE == 32
#define __STD_TYPE __extension__ typedef
#elif __WORDSIZE == 64
# define __STD_TYPE typedef
#else
# error
#endif
__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */
也就是说如果我们编译的程序是32位的,那么__pid_t
的定义如下:
__extension__ typedef __PID_T_TYPE __pid_t;
如果我们编译的程序是64位的,那么__pid_t
的定义如下:
typedef __PID_T_TYPE __pid_t;
其中__extension__
的作用是:GCC对标准C语言进行了扩展,但用到这些扩展功能时,编译器会提出警告,使用__extension__
关键字会告诉GCC不要提出警告。
__pid_t
的定义等同于__PID_T_TYPE
,我们继续寻找__PID_T_TYPE
的定义,在头文件<bits/typesizes.h>
中我们发现__PID_T_TYPE
的定义如下:
#define __PID_T_TYPE __S32_TYPE
至此,我们找到了pid_t
的定义等同于__S32_TYPE
。那__S32_TYPE
又是什么类型呢?我们返回至头文件<bits/types.h>
发现有如下定义:
#define __S32_TYPE int
至此,我们得出如下结论: pid_t等于int。