当前位置: 技术问答>linux和unix
如何查看某一结构的定义
来源: 互联网 发布时间:2016-01-12
本文导语: 我是linux新手,问如何查看某一结构的定义 如:我在使用函数pthread_cond_timedwait时, man pthread_cond_timedwait 看到了函数声明 int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const st...
我是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 ,怎么能查出该结构的所有成员定义和说明?
如:我在使用函数pthread_cond_timedwait时,
man pthread_cond_timedwait 看到了函数声明
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t
*mutex, const struct timespec *abstime);
这里出现了一个结构timespec ,怎么能查出该结构的所有成员定义和说明?
|
俺个人觉得讨论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是一样的感觉。
而这些过程有心的人会逐渐的形成一个个小的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是一样的感觉。
|
你的问题有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比较方便。但是无法扩充,只能在那个窗口中操作,只能使用他为你提供的使用方法,打印风格,无法体现个人的使用习惯,简单讲强奸人的意识,让你思维模式化。
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比较方便。但是无法扩充,只能在那个窗口中操作,只能使用他为你提供的使用方法,打印风格,无法体现个人的使用习惯,简单讲强奸人的意识,让你思维模式化。
|
http://www.google.com/codesearch
开源的东西一般这里都能搜到,顺便不屑一下ms和msdn和楼上的
开源的东西一般这里都能搜到,顺便不屑一下ms和msdn和楼上的
|
你可以仔细查看当前函数的man帮助,一般他都会指出在哪查找的,譬如这么函数
The abstime parameter specifies an absolute time, with the
same origin as time(2) and gettimeofday(2):
它说跟gettimeofday(2)里面的结构一样,则你可以去查看gettimeofday(2),就知道了
The abstime parameter specifies an absolute time, with the
same origin as time(2) and gettimeofday(2):
它说跟gettimeofday(2)里面的结构一样,则你可以去查看gettimeofday(2),就知道了
|
楼主,你的问题太经典了!
因为在这里已经有无数“菜鸟”问过了!
但这里的“高手”,也许是unix/linux开发平台本身就没有这种直接的帮助!想与MSDN比?“高手”们会说linux没这种帮助与man无关,当然无关,man是一个功能嘛,其内容是XX提供的,这与linux本身无关。也许我可以说windows是一个操作系统,msdn只是一个帮助嘛,这也与win无关!可实际上linux的man加所有的,开发的帮助文档就是少,struct timespec这个是什么?有谁可以直接查出来?“高手”们...
对不起,我又在说linux的坏话!
闪人...
因为在这里已经有无数“菜鸟”问过了!
但这里的“高手”,也许是unix/linux开发平台本身就没有这种直接的帮助!想与MSDN比?“高手”们会说linux没这种帮助与man无关,当然无关,man是一个功能嘛,其内容是XX提供的,这与linux本身无关。也许我可以说windows是一个操作系统,msdn只是一个帮助嘛,这也与win无关!可实际上linux的man加所有的,开发的帮助文档就是少,struct timespec这个是什么?有谁可以直接查出来?“高手”们...
对不起,我又在说linux的坏话!
闪人...
|
顺便不屑一下ms和msdn和楼上的
------
呵呵,意料之中啦!但却不是情理之中!
linux的联机开发帮助与msdn根本就没有可比性!你不屑msdn却找不出linux下的msdn!不管你承不承认,这都是事实!而正是因为这是事实,每当有人说linux下的东西比win下的什么不好之时,总有些人在说不出任何理由时却可以说win下的东西是垃圾!linux不是win!
------
呵呵,意料之中啦!但却不是情理之中!
linux的联机开发帮助与msdn根本就没有可比性!你不屑msdn却找不出linux下的msdn!不管你承不承认,这都是事实!而正是因为这是事实,每当有人说linux下的东西比win下的什么不好之时,总有些人在说不出任何理由时却可以说win下的东西是垃圾!linux不是win!
|
呵呵,另外,如果你有Unix环境高级编程(第二版),呵呵,在后面的索引中,你会找到在383页有它的定义:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
}
稍微解释一下,秒,纳秒
希望对你有帮助
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
}
稍微解释一下,秒,纳秒
希望对你有帮助
|
还有点,如果是中文版,在310页,俺的就是中文版,看起来省劲,快
呵呵,鄙视俺吧,俺喜欢中文版
呵呵,鄙视俺吧,俺喜欢中文版
|
hehe,just do it.
|
俺花了一点时间查到那个在time.h,呵呵,希望对你有帮助
|
拜托,man只是一个平台,其功能强大与否与相关内容无关的,你们说了那么多,却都在说man是如何强大方便的。
还有,linux下可以用google等在网上找资料!
可win下同样可以通过google在网上找资料啊!
所以网络是win与linux共有的,而不共用的,win的有linux没有,linux有的,绝大部分会说linux是一个自主学习过程!
我想知道的是怎么样解决问题,而不是为解决这个问题还要去学习一大堆的东西!虽然这会有进步,但效率太低!如果有一个好的帮助,看帮助不是学习吗?
我想最好当要开发一个程序时,自已首先写一个操作系统再说,如果能这样,那你要在自已的系统上开发软件不是件轻而易举的事情吗?这个学习的过程不错吧?
比来比去意义!那是因为你们还没认真比过!我用C#两年VC两年,现在linux下做C++,联机帮助是开发必不可少的!
还有,linux下可以用google等在网上找资料!
可win下同样可以通过google在网上找资料啊!
所以网络是win与linux共有的,而不共用的,win的有linux没有,linux有的,绝大部分会说linux是一个自主学习过程!
我想知道的是怎么样解决问题,而不是为解决这个问题还要去学习一大堆的东西!虽然这会有进步,但效率太低!如果有一个好的帮助,看帮助不是学习吗?
我想最好当要开发一个程序时,自已首先写一个操作系统再说,如果能这样,那你要在自已的系统上开发软件不是件轻而易举的事情吗?这个学习的过程不错吧?
比来比去意义!那是因为你们还没认真比过!我用C#两年VC两年,现在linux下做C++,联机帮助是开发必不可少的!
|
用cscope跳转。
很好用
很好用
|
看看输出: :-)
C symbol: timespec
File Function Line
0 log.c 3 *mutex, const struct timespec *abstime);
1 pthread.h pthread_mutex_timedlock 348 __const struct timespec *__restrict
2 pthread.h pthread_cond_broadcast 415 __const struct timespec *__restrict
3 pthread.h pthread_rwlock_timedrdlock 457 __const struct timespec *__restrict
4 pthread.h pthread_rwlock_timedwrlock 470 __const struct timespec *__restrict
5 sched.h sched_rr_get_interval 63 extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
6 signal.h sigpending 285 __const struct timespec *__restrict __timeout);
7 time.h __USING_NAMESPACE_STD 118 struct timespec
8 time.h __USING_NAMESPACE_STD 161 struct timespec it_interval;
9 time.h __USING_NAMESPACE_STD 162 struct timespec it_value;
a time.h dysize 324 extern int nanosleep (__const struct timespec *__requested_time,
b time.h dysize 325 struct timespec *__remaining);
c time.h clock_getres 329 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
d time.h clock_gettime 332 extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
e time.h clock_settime 335 extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
f time.h clock_settime 344 __const struct timespec *__req,
g time.h clock_settime 345 struct timespec *__rem);
---
7 time.h __USING_NAMESPACE_STD 118 struct timespec
就是你要的啦
Find this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
Find all function definitions:
Find all symbol assignments:
C symbol: timespec
File Function Line
0 log.c 3 *mutex, const struct timespec *abstime);
1 pthread.h pthread_mutex_timedlock 348 __const struct timespec *__restrict
2 pthread.h pthread_cond_broadcast 415 __const struct timespec *__restrict
3 pthread.h pthread_rwlock_timedrdlock 457 __const struct timespec *__restrict
4 pthread.h pthread_rwlock_timedwrlock 470 __const struct timespec *__restrict
5 sched.h sched_rr_get_interval 63 extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW;
6 signal.h sigpending 285 __const struct timespec *__restrict __timeout);
7 time.h __USING_NAMESPACE_STD 118 struct timespec
8 time.h __USING_NAMESPACE_STD 161 struct timespec it_interval;
9 time.h __USING_NAMESPACE_STD 162 struct timespec it_value;
a time.h dysize 324 extern int nanosleep (__const struct timespec *__requested_time,
b time.h dysize 325 struct timespec *__remaining);
c time.h clock_getres 329 extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __THROW;
d time.h clock_gettime 332 extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
e time.h clock_settime 335 extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
f time.h clock_settime 344 __const struct timespec *__req,
g time.h clock_settime 345 struct timespec *__rem);
---
7 time.h __USING_NAMESPACE_STD 118 struct timespec
就是你要的啦
Find this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
Find all function definitions:
Find all symbol assignments:
|
呵呵,俺觉得awjx这句话非常说明linux学习的过程:为解决这个问题还要去学习一大堆的东西。在linux上,的确是这样。
个人认为:
1. 在linux上学习,绝对没有速成的,也不要报着这样的想法。所以如果想知道:怎么样解决问题,你可能需要克服的是n个问题。当然,最好不要问别人,靠自己和google,往往能解决。实在解决不了再发贴,呵呵。
2. 俺不是说直接去找解决问题有啥不好,但俺觉得自己逐步的克服一个又一个困难,最终达成目的,这个过程,实在是太享受了。就像千辛万苦找到了一个bug后的感觉一样。
3.也许,过段时间,你会发现,你知道了很多东西,更重要的是,你发现原来有那么多东西你不知
道。而这是你直接找到问题的解决方案所不能提供的。
呵呵,不好意思,还整了个一二三条来。
咱中国有句俗话,叫“触类旁通”,“厚积薄发”,学linux编程不一定能做到这一点,但如果踏踏实实,一步一个脚印,不浮躁,并为自己的一点小小的成果(如今天俺学会了vi中用cw)而快乐(当然,不是妄自尊大),就够了。
俺不想教书,这是俺的个人感受
个人认为:
1. 在linux上学习,绝对没有速成的,也不要报着这样的想法。所以如果想知道:怎么样解决问题,你可能需要克服的是n个问题。当然,最好不要问别人,靠自己和google,往往能解决。实在解决不了再发贴,呵呵。
2. 俺不是说直接去找解决问题有啥不好,但俺觉得自己逐步的克服一个又一个困难,最终达成目的,这个过程,实在是太享受了。就像千辛万苦找到了一个bug后的感觉一样。
3.也许,过段时间,你会发现,你知道了很多东西,更重要的是,你发现原来有那么多东西你不知
道。而这是你直接找到问题的解决方案所不能提供的。
呵呵,不好意思,还整了个一二三条来。
咱中国有句俗话,叫“触类旁通”,“厚积薄发”,学linux编程不一定能做到这一点,但如果踏踏实实,一步一个脚印,不浮躁,并为自己的一点小小的成果(如今天俺学会了vi中用cw)而快乐(当然,不是妄自尊大),就够了。
俺不想教书,这是俺的个人感受