免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 779 | 回复: 0
打印 上一主题 下一主题

如何查看某一结构的定义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-14 17:10 |只看该作者 |倒序浏览


所属分类:Linux/Unix社区 程序开发区
----------------------------------------------------------------------
我是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!
--------------------------------------------------------
man gettimeofday看不到结构timespec ,只能看到timeval和timezone。
http://www.google.com/codesearch上确能查到,但好像在直接查看源文件了。还不够方便的说。
ps:争论谁好谁坏没有意义,解决问题才是王道!
--------------------------------------------------------
俺个人觉得讨论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比较方便。但是无法扩充,只能在那个窗口中操作,只能使用他为你提供的使用方法,打印风格,无法体现个人的使用习惯,简单讲强奸人的意识,让你思维模式化。
--------------------------------------------------------
hehe,just do it.
--------------------------------------------------------
俺花了一点时间查到那个在time.h,呵呵,希望对你有帮助
--------------------------------------------------------
拜托,man只是一个平台,其功能强大与否与相关内容无关的,你们说了那么多,却都在说man是如何强大方便的。
还有,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:
--------------------------------------------------------
呵呵,俺觉得awjx这句话非常说明linux学习的过程:为解决这个问题还要去学习一大堆的东西。在linux上,的确是这样。
个人认为:
1. 在linux上学习,绝对没有速成的,也不要报着这样的想法。所以如果想知道:怎么样解决问题,你可能需要克服的是n个问题。当然,最好不要问别人,靠自己和google,往往能解决。实在解决不了再发贴,呵呵。
2. 俺不是说直接去找解决问题有啥不好,但俺觉得自己逐步的克服一个又一个困难,最终达成目的,这个过程,实在是太享受了。就像千辛万苦找到了一个bug后的感觉一样。
3.也许,过段时间,你会发现,你知道了很多东西,更重要的是,你发现原来有那么多东西你不知
道。而这是你直接找到问题的解决方案所不能提供的。
呵呵,不好意思,还整了个一二三条来。
咱中国有句俗话,叫“触类旁通”,“厚积薄发”,学linux编程不一定能做到这一点,但如果踏踏实实,一步一个脚印,不浮躁,并为自己的一点小小的成果(如今天俺学会了vi中用cw)而快乐(当然,不是妄自尊大),就够了。
俺不想教书,这是俺的个人感受


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38729/showart_301307.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP