GCC声明:typedef __pid_t pid_t?

时间:2014-05-30 12:05:27

标签: 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

而不是

typedef int pid_t;

我看到一些网站上有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.8/3.3.2/include/sys/types.h.html

更新:

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

2 个答案:

答案 0 :(得分:2)

如果您要提升types.h通过'人类型'然后在头文件的顶部(在手册页中的描述下)应该存在一个包含文件,在某些时候将'__pid_t'定义为有符号整数(如果Ubuntu声称它们的类型符合POSIX;否则{{ 1}}可以是任何东西)。符号pid_t被认为是保留的(C标准,关于C ++的dunno)。如果我不得不疯狂猜测为什么' __'被定义为pid_t而不是某些int是因为__pid_t是Debian的或者Linux Kernel' s开发人员决定在其所有库函数中使用进程ID变量名;因此,只需更改__pid_t即可更改进程ID的整数大小。

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

答案 1 :(得分:1)

好的,我发现__pid_t对这个问题的答案意味着什么: Why PID of a process is represented by opaque data type?

QUOTE

typedef __pid_t pid_t;
...
# define __STD_TYPE     typedef
__STD_TYPE __PID_T_TYPE __pid_t;    /* Type of process identifications.  */
...
#define __PID_T_TYPE        __S32_TYPE
...
#define __S32_TYPE      int

引文结束

所以pid_t是一个__pid_t,它是一个__PID_T_TYPE,它是一个__S32_TYPE,它是一个int。