日期:2014-05-16  浏览次数:20823 次

如何查看某一结构的定义
我是linux新手,问如何查看某一结构的定义

如:我在使用函数pthread_cond_timedwait时,
        man   pthread_cond_timedwait   看到了函数声明

int       pthread_cond_timedwait(pthread_cond_t       *cond,         pthread_mutex_t
              *mutex,   const   struct   timespec   *abstime);


这里出现了一个结构timespec   ,怎么能查出该结构的所有成员定义和说明?

------解决方案--------------------
楼主,你的问题太经典了!
因为在这里已经有无数“菜鸟”问过了!
但这里的“高手”,也许是unix/linux开发平台本身就没有这种直接的帮助!想与MSDN比?“高手”们会说linux没这种帮助与man无关,当然无关,man是一个功能嘛,其内容是XX提供的,这与linux本身无关。也许我可以说windows是一个操作系统,msdn只是一个帮助嘛,这也与win无关!可实际上linux的man加所有的,开发的帮助文档就是少,struct timespec这个是什么?有谁可以直接查出来?“高手”们...


对不起,我又在说linux的坏话!
闪人...

------解决方案--------------------
http://www.google.com/codesearch

开源的东西一般这里都能搜到,顺便不屑一下ms和msdn和楼上的
------解决方案--------------------
你可以仔细查看当前函数的man帮助,一般他都会指出在哪查找的,譬如这么函数

The abstime parameter specifies an absolute time, with the
same origin as time(2) and gettimeofday(2):

它说跟gettimeofday(2)里面的结构一样,则你可以去查看gettimeofday(2),就知道了
------解决方案--------------------
顺便不屑一下ms和msdn和楼上的
------
呵呵,意料之中啦!但却不是情理之中!

linux的联机开发帮助与msdn根本就没有可比性!你不屑msdn却找不出linux下的msdn!不管你承不承认,这都是事实!而正是因为这是事实,每当有人说linux下的东西比win下的什么不好之时,总有些人在说不出任何理由时却可以说win下的东西是垃圾!linux不是win!


------解决方案--------------------
俺个人觉得讨论linux的man还是win的msdn好其实没啥意义,玩linux你就是想接近实现接近底层,所以用grep去头文件里搜,一个宏一个宏的翻,这本身就是一个学习的过程。
而这些过程有心的人会逐渐的形成一个个小的shell或者perl程序,这是属于个人的msdn,是学习的过程中构建的msdn。相信在搜索的过程中,你得到的会很多。

而微软的msdn,嗯,我承认,很方便,呵呵。

就像俺学习FD_XXX(如FD_SET)的过程一样,惊奇于它的结构和实现方式,于是去查它所属的.h,打开.h,然后会跟踪到一些莫名其妙的代码,去问google,它会告诉你这是汇编代码,呵呵,于是,你顺便可以补充一点汇编的知识,我没查msdn,我想,msdn中大概不可能会去介绍FD_SET的汇编实现,当然,更不可能让你有冲动去看看它的实现。

呵呵,个人觉得,容易有容易的好处,难有难的好处。关键要看做什么,还有,如何看待这个。

不要跟俺较真win好还是linux好,俺觉得那没意义,有空多去读段程序,或者去回答一个问题吧。
另外俺想,这么长时间一来unix上一直没有一个msdn,应该不是人为的错误,因为有奉献精神的人太多了,想构建并维护一个这个东西并不难,很多东西往往用一段时间后,才会发现它的用处,例如vi, 当你用惯了IDE,notepad, editplus上的编辑器,突然用vi,甚至在开始的一段时间内,你都觉得这个浏览器真的疯了,太费劲了,等你坚持一段时间,在你写程序的时候,突然发现你已经把h j k l下意识的用来移动,很不经意的用o进入下一行的编辑,用edit和buffer交互的编辑文档的时候,你会惊异的发现,你入门了,这个东西很有趣,现在你再回过头来比较其他的编辑器,你会觉得:嗯,这根本就不是一类东西,不用比的。
很抱歉,俺对vi的使用仅仅才入门,感觉还不能写明白,不过俺觉得这就跟man跟msdn是一样的感觉。
------解决方案--------------------
呵呵,另外,如果你有Unix环境高级编程(第二版),呵呵,在后面的索引中,你会找到在383页有它的定义:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
}
稍微解释一下,秒,纳秒
希望对你有帮助
------解决方案--------------------
还有点,如果是中文版,在310页,俺的就是中文版,看起来省劲,快
呵呵,鄙视俺吧,俺喜欢中文版
------解决方案--------------------
你的问题有man nanosleep 或直接查看/usr/include/time.h

linuxer有自己的swiss knife ---- grep .
linuxer可以使用grep /usr/include -Rn -e 'struct timespec ' --color 来找到所需的任何信息而且带关键字加亮。在出来的文件当中你需要寻找那些看起来较为标准化的头文件(如:time.h)里面有你需要的信息。

如果你实在想看man的说明,
man timespec 没有结果。然后(需要点常识,timespec是和时间间隔有关的函数,如select,pthread_cond_timedwait,sleep,nanosleep)
这几个函数当中其中就有两个包含了它的说明,select,nonasleep. 这个结构实在太简单,以至于没人愿意为它写个man页。

man是个强大的系统,虽然它的默认man页集比较小,风格比较老式,但它可以显示在单色字符终端上,人们习惯它而不愿意去改变它,而不是不能改变。它的页面处理,输出都可定制。输出到打印机时就是一本书。排版已经全部完成了,不需要额外的排版。

MSDN,是MS为花钱的顾客做了一个大而全的东西,也许查询某些window API比较方便。但是无法扩充,只能在那个窗口中操作,只能使用他为你提供的使用方法,打印风格,无法体现个人的使用习惯,简单讲强奸人的意识,让你思维模式化。