Linux pid_t 类型的定义

pid_t 类型在 Linux 环境编程中用于定义进程 ID,需要引入头文件,首先看一下头文件/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的定义。

头文件中包含了头文件,根据名称可见与类型的定义相关,我们在头文件中找到了__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的定义,在头文件中我们发现__PID_T_TYPE的定义如下:

#define __PID_T_TYPE            __S32_TYPE

至此,我们找到了pid_t的定义等同于__S32_TYPE。那__S32_TYPE又是什么类型呢?我们返回至头文件发现有如下定义:

#define __S32_TYPE              int

至此,我们得出如下结论:
pid_t 等于 int。

你可能感兴趣的:(Linux基础,linux)