GCC声明:typedef __pid_t pid_t?

gon*_*uis 6 unix gcc fork

我对(例如)pid_t的声明感到困惑.__pid_t是什么意思?它是在别处定义的另一种类型吗 如果是的话,在哪里?为什么我的types.h在ubuntu 13.04 64bit中定义了pid_t,如:

#ifndef __pid_t_defined
typedef __pid_t pid_t;
#define __pid_t_defined
#endif
Run Code Online (Sandbox Code Playgroud)

而不是像

typedef int pid_t;
Run Code Online (Sandbox Code Playgroud)

我看到一些网站有types.h标头,声明是最后一种方式.这是一个:http: //www.sde.cs.titech.ac.jp/~gondow/dwarf2-xml/HTML-rxref/app/gcc-3.3.2/lib/gcc-lib/sparc-sun-solaris2 0.8/3.3.2/include/sys中/ types.h.html

更新:

好的我发现pid_t是__pid_t,它是一个__PID_T_TYPE,它是一个__S32_TYPE,它是一个int.我现在的问题是为什么会这样?POSIX只声明pid_t必须是有符号整数,那么为什么要使声明在头文件中深入输入?

小智 2

如果你通过'man types'拉出你的types.hvia,那么在头文件的顶部(在手册页的描述下)应该存在一个包含文件,它'__pid_t'在某个时刻定义为有符号整数(如果Ubuntu声称它们的类型是符合 POSIX 标准;否则pid_t可能是任何东西)。该符号' __'被认为是保留的(C 标准,不知道 C++)。如果我不得不大胆猜测为什么pid_t定义为__pid_t而不是某个 int ,是因为__pid_tDebian 或 Linux 内核的开发人员决定在其所有库函数中使用进程 ID 变量名称;因此只需'__pid_t'更改进程 ID 的整数大小即可。

在提出问题之前,你真的应该环顾四周,很容易找到类似的 stackoverflow 问题:Size of pid_t, uid_t, gid_t on Linux