|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
pid_t的类型定义 | | | 创建进程时经常会用到进程号的类型定义:pid_t。我们都知道这个类型定义实际上就是int型。但是在linux下的c中的头文件中这个定义到底是怎么定义的呢?今天就把以前找这个定义的过程贴出来:$ G6 {+ K o) U K n
& X4 Q' v3 ?- ?% K+ Z1 k. _, J1.首先在/usr/include/sys/types.h中有如下定义
$ A/ I! y' A/ y* l
5 {$ B* I/ t7 x8 A#include <bits/types.h>8 E, ~$ D6 J; q6 U
......- H* }7 Y" v, g' b7 F
9 ~1 U7 s. D( |( U; w& M5 ~7 g
#ifndef __pid_t_defined# V% D; b9 ^" A$ N6 r V P6 ]
typedef __pid_t pid_t;
( E @( Y& a; v; m8 b# define __pid_t_defined9 r6 s' z, [& r+ ~
#endif* C0 a0 I$ g4 ~5 l1 ^' D+ v
可以看到pid_t 其实就是__pid_t类型。. ^0 H6 O" B; |$ l W- D- ~
) S! o9 M! z: y+ Q
2.在/usr/include/bits/types.h中可以看到这样的定义' \! V! Y8 W8 @0 I3 ~2 X
4 Y* R% W0 T" G" A. y, }#include <bits/typesizes.h>
. w: a) m' K" Q- A" T( t5 V6 e% a8 N$ V- j$ _; m
#if __WORDSIZE == 32$ @; p- _6 }7 ]: r
......: d' j- `5 D. @' U
# define __STD_TYPE __extension__ typedef2 g2 F5 j: j, L, e6 w+ N. ~9 h
#elif __WORDSIZE == 64+ _7 T. `( T1 g& _: m F: u" [
......
. Z6 W* N7 Q7 u' Y$ F3 S# v. Z7 u#endif/ n0 c6 }+ N6 z$ c
......1 b7 n: [( c2 w" A$ q4 D
__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */. j+ P! A. | N5 Z
J' y+ b: U$ h# q* Y' g可以看出__pid_t 有被定义为 __extension__ typedef __PID_T_TYPE类型的。
9 \ g+ ^, w3 }( n4 E5 ^/ r5 }6 W0 C) q, U7 \/ J
3.在文件/usr/include/bits/typesizes.h中可以看到这样的定义(这个文件中没有包含任何的头文件):
% q q; E$ E! |' u: I/ ~
& c) |2 S/ x2 m! _* H; H#define __PID_T_TYPE __S32_TYPE3 h- u7 r& ?" ?% O( q/ r- g
$ K. D3 O1 J' o( S可以看出__PID_T_TYPE有被定义为__S32_TYPE这种类型。' }5 h f1 G5 A: Y
5 |$ [5 l% D* A: W4.在文件/usr/include/bits/types.h中我们终于找到了这样的定义:
; g2 { c9 H$ Z; h& S/ L {: v2 W: s8 B4 `$ W3 E
#define __S32_TYPE int4 W' s( ?! }2 i% D8 I, Z% n
+ o+ l$ X7 `2 C; Q
由此我们终于找到了pid_t的真实定义:实际他就是 int 类型的。
) v; O' J O% ?+ c7 F! t |
7 I: A, D* [0 K7 j) y5 e, a |
! E" ~. M0 m0 n2 f |
|