EDA365电子论坛网

标题: Linux C编程之pid_t的类型定义 [打印本页]

作者: thinkfunny    时间: 2019-7-26 10:52
标题: Linux C编程之pid_t的类型定义
pid_t的类型定义
创建进程时经常会用到进程号的类型定义: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

- L8 \; [' K0 d9 Z7 y* S# e1 n3 H
作者: xixihahaheihei    时间: 2019-7-29 18:41
谢谢分享




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2