linux pid t 头文件_如何查找Linux中一些特殊数据类型定义,比如pid_t和uid_t | 学步园...

刚开始学习的时候看到像pid_t、uid_t这样的类型,总是想知道它的定义在哪,究竟是什么类型。但是直接看使用这些类型的函数的头文件根本就找不到。这里把我的一些经验分享给大家,希望有所帮助。

下面以pid_t类型和getpid函数为例,getpid的定义如下:

#include

#include

pid_t getpid(void);

pid_t getppid(void);

这里面有两个头文件,但是一般情况下pid_t这个类型都在sys/types.h这个头文件中,所以先到这样的头文件中找。在sys/types.h头文件中搜索pid_t,可以找到下面的语句:

#ifndef __pid_t_defined

typedef __pid_t pid_t;

# define __pid_t_defined

#endif

可以看到pid_t类型其实就是__pid_t类型,但是在sys/types.h在头文件中没有找到__pid_t这个类型,这个时候应该怎么办呢?看sys/types.h中包含的头文件,即include语句,从这些语句中选择bits/types.h这个头文件,至于为什么这就牵涉到内核的一些类型定义的规则或者叫规律,但是一般按照先sys目录然后再bits目录都没有错。在bits/types.h头文件中可以找到下面的语句:

__STD_TYPE __PID_T_TYPE __pid_t; /* Type of process identifications. */

也就是说__pid_t其实是__PID_T_TYPE类型,而这个类型在哪定义呢?也是先看include语句,选择bits/typesizes.h头文件,也是经验,从这个头文件中就可以找到下面的语句:

#define __PID_T_TYPE __S32_TYPE

也就是说__PID_T_TYPE其实是__S32_TYPE类型,如果单从字面意思看的话这应该是一个32位的整形或者其他类型,但是千万不要这么早下结论。而这个类型在bits/typesize.h中找不到,而且这个头文件中也没有include语句,这个时候怎么办呢?还去bits/types.h中找,可以找到下面的语句:

#define __S32_TYPE int

至此,终于找到了,pid_t其实就是int类型。在32位机下pid_t是32位的整数,在64位机下pid_t是64位整数,所以看到__S32_TYPE这样的类型千万不要过早地下结论是32位或64位。

总结一下,找一个类型,一般的过程就是(比如从xxx.h开始):

xxx.h----->sys/xxx.h----->bits/xxx.h----->bits/types.h和bits/typesize.h

或者有时还要去asm目录和asm-generic目录中的头文件中找。还有一种方式就是在linux内核源码中找,但是可能某些同学感觉不爽,哈哈!

虽然我写这篇文章告诉你怎么找一些特殊类型,但是强烈建议初学者你不要总是这么寻根究底地查找某些类型的定义,因为这些完全没有意义,你只要知道他是什么类型就行,怎么用就可以,把跟多的精力投入到一些全局的东西,不要总是抠细节,那是在你学到一定程度之后要做的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值