我对(例如)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必须是有符号整数,那么为什么要使声明在头文件中深入输入?
答案 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。