创建进程时经常会用到进程号的类型定义:pid_t。我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:
) f8 _( `3 M, S. J% Q* Z% N* z) z p) E
1.首先在/usr/include/sys/types.h中有如下定义! b/ G* A: |- f+ _8 ~* M" e' y
; w) C5 s$ ?0 s) Q- o
#include <bits/types.h>
0 V* \8 c& I( o- i- S ......' v$ S# \9 V, [* X
) q: {2 l% C, L% \0 ?! I- F3 X9 F4 E
#ifndef __pid_t_defined! @! b& m; x6 |! f
typedef __pid_t pid_t;) q5 l2 k L$ ]# m3 N; @$ t2 ]
# define __pid_t_defined
3 w9 o* K+ Y) }& ]2 K6 X#endif1 ]0 W! T- n* A# ^/ k
可以看到pid_t 其实就是__pid_t类型。! i' U5 M/ j' Z% R8 ~
2 X' Q6 i. l3 Z. { i, ^: h% ]$ K2.在/usr/include/bits/types.h中可以看到这样的定义. s2 t6 s2 b$ |& A" F
7 }5 U" E0 ]& b#include <bits/typesizes.h>, r, w' V5 q# x% }$ I8 ]0 L
0 d9 B0 O( T7 j7 U: {! M* o$ b0 s
#if __WORDSIZE == 32
# b- ?; W& I( m( k- d Y ......
0 S9 E+ f: e2 O2 K3 E9 F# define __STD_TYPE __extension__ typedef
, U( L* q( B5 ^; V#elif __WORDSIZE == 64
; Q1 g6 g% p& g" M' m' A9 W I: y ......2 z9 L9 j5 k8 i- Q' {$ h0 M
#endif
, Q' D1 J4 h1 U6 F) U ......: T( h# O( s1 S5 m$ {" B
__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */) }& S( Y! O$ z4 e
8 O4 Z( B/ `3 Q( L' ?
可以看出__pid_t 有被定义为 __extension__ typedef __PID_T_TYPE类型的。
6 N% l5 i* t; [
& C( Z. j0 i' z( s3.在文件/usr/include/bits/typesizes.h中可以看到这样的定义(这个文件中没有包含任何的头文件):
( t, J' E3 x9 w, \8 ~
( o* _% `/ m Q Q" o#define __PID_T_TYPE __S32_TYPE- v: U1 \1 h! }6 Q9 L1 W( U" T4 ^
# f( r7 M, u5 F+ C% ~0 Y x可以看出__PID_T_TYPE有被定义为__S32_TYPE这种类型。
1 I' P4 O' y/ r9 s; T2 |) C6 B( H6 }/ K. R+ C. r/ u/ g, a9 i
4.在文件/usr/include/bits/types.h中我们终于找到了这样的定义:
& @+ M( U1 x( b4 `
. H3 [# l) | g8 W. X% I0 g1 C#define __S32_TYPE int2 C" [( Q5 ~( e5 K' T7 \: x
, Z" D8 U9 _% y3 e* O
由此我们终于找到了pid_t的真实定义:实际他就是 int 类型的。
: `. R$ m: w5 w2 e* L/ F$ Y | 7 o* X+ v+ `9 p
|