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。