linux查看C结构体定义

 今天写程序时,用到了pthread_cond_timedwait 函数,其原型为:int pthread_cond_timedwait(pthread_cond_t  *restrict cond , pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime); 最后一个参数是 timespec 结构体,可惜man里面没有给出具体定义,只好自己去查了。下面就说下具体步骤,也算给大家做个参考,同时欢迎提供更好的方法:

1,符号定义基本都在/usr/include文件夹下可以找到 也有可能在/usr/src下(想想自己程序中引用的头文件就明白了)。那么我们就可以在/usr/include 文件夹下搜索该结构体定义。输入shell命令:grep ‘struct timespec’ /usr/include/*.h 回车,观察结果,
这里写图片描述
从结果中(尤其最后几行),我们可以很容易发现,struct timespec 结果体被定义在了/usr/include/time.h 文件中。
2,打开time.h文件,查看具体定义。操作步骤:输入shell命令:vi /usr/include/time.h 回车 。然后在vi编辑器中搜索struct timespec 即可找到该结构体的具体定义(对vi编辑器使用不熟的童鞋,请自觉google,baidu)。如下图所示:
这里写图片描述
3,如果查看了该结构体的具体定义,你还不满意,仍旧对结构体成员中__time_t 这个数据类型耿耿于怀的话,那我们就继续。按照查找struct timespec 结构体时的方法,查找 __time_t 到底是由什么基本数据类型来定义的。输入shell命令:grep ‘__time_t’ /usr/include/*.h 回车,结果如下:
这里写图片描述
注意,图中标出的一句话:它明确的告诉我们:在 /usr/include/bits/types.h 文件中,为我们定义了符号 __time_t 。
4,用vi 编辑器打开文件types.h 文件,搜索 __time_t , 结果如下:
这里写图片描述
此时,各位童鞋是不是有种泪奔的感觉,反正我有了……可是轻易放弃不是咱程序猿的臭脾气啊,带着一股倔劲,继续!红线框中的那一句告诉我们:__time_t 是从Epoch开始的秒数(Epoch:Unix时间戳,代表一个特定的时间:1970-01-01 00:00:00 UTC,不了解的请baidu),而且被定义成了标准数据类型__TIME_T_TYPE , 接下来,你猜到我要干什么了吗?对了,就是重复上边的步骤,查查 __TIME_T_TYPE 到底是个啥玩意。
5,输入shell命令:grep ‘__TIME_T_TYPE’ /usr/include/.h 回车,发现啥也没找到。仔细一想,第四步中,types.h 文件在/usr/include/bits/ 文件夹下,那么它的定义也很有可能就在这哦,接着输入shell命令:grep ‘__TIME_T_TYPE’ /usr/include/bits/.h 回车,结果如下:(也可以直接用:grep ‘__TIME_T_TYPE’ /usr/include//.h 表示搜索本目录和子目录,建议一般别搜索子目录,耗时间呀多层搜索 grep ‘TIME_T_TYPE’usr/////*.h)
这里写图片描述
看到这里,我们就明白了,__Time_T_TYPE 被定义在了文件typesize.h 中,但我们无需打开文件,注意后边那个单词:__SLONGWORD_TYPE 表示__TIME_T_TYPE 被定义成了 __SLONGWORD_TYPE 类型。我们知道,WORD_TYPE 这种类型基本上都和具体的机器位数有关了。它表示:具体机器上的一个长型字。
6,如果想查看具体自己机器上是什么基本类型的话(机器类型定义在/usr/include/bits/types.h文件中),可以输入shell命令:grep ‘SLONGWORD_TYPE’ /usr/include/bits/types.h 回车(如果忘了在哪个文件中,也可以直接搜索所有目录:grep ‘SLONGWORD_TYPE’ /usr/include//.h),结果如下:
这里写图片描述
至此,大功告成,在我的机器上,__SLONGWORD_TYPE 就是 long int 类型……

补充:vim编辑器的查找字符串的功能;
一,用/和?的区别
/后跟查找的字符串。vim会显示文本中第一个出现的字符串。
?后面跟查找的字符串。vim会显示文本中最后一个出现的字符串。
不管是用/和?查找到的第一个字符串后,按回车,vim会高亮所有的匹配字符串
按n或shift+n 可以下一个或者上一个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值