免费注册 查看新帖 |

Chinaunix

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

[C] 看到一个没有见过的结构,典型的处理过程是什么 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-24 17:09 |只看该作者 |倒序浏览
20可用积分
我看到一段以前同学写的代码,
void loop_callback(const u_char * packet,int packet_len)
{
        int data_length,i;
        struct iphdr *ip;

        ip=(struct iphdr *)(packet+14);
        data_length=ntohs(ip->tot_len);//感到很神奇
        ...
}
struct iphdr在哪里定义的?我应该如何进行查找,
我估计应该是/usr/include/里,按照他include的头文件一个一个找是能找到的,
不过我想熟练者是否有典型的处理过程?
我假象的过程:
保留一个常用的头文件放在本地机器上,
如果发现一个不认识的结构,用ultraedit之类的程序把这个关键字一搜,就找到了。

做为老手,是什么样的处理过程?谢谢

最佳答案

查看完整内容

#cd /usr/include#grep -r 'struct iphdr' * 最好用这个: #grep -r 'struct iphdr {' *差不多了,你就可以收玉米了。[ 本帖最后由 samon_fu 于 2008-10-31 20:54 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-24 17:09 |只看该作者

回复 #8 archphoenix 的帖子

#cd /usr/include
#grep -r 'struct iphdr' *   最好用这个:  #grep -r 'struct iphdr {' *

差不多了,你就可以收玉米了。

[ 本帖最后由 samon_fu 于 2008-10-31 20:54 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-10-24 17:21 |只看该作者
首先看是不是自己代码中的结构,如果不是再在帮助中查找,看在哪个头文件中提供(对于man手册,这个不太方便,此时可以使用google搜索)

论坛徽章:
0
4 [报告]
发表于 2008-10-24 17:24 |只看该作者
有代码的用 ctags 之类的东西。

如果能编译,可以用调式器看这个结构。

如果是标准结构,可以找万能的 google

你说的结构在 /usr/include/linux/ip.h 中

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2008-10-24 18:11 |只看该作者
1 ctags
2 如果用vim 7.0 的话,可以借助自动补全功能,gf命令
3 Source insight 把头文件都加入到project

也有的牛人熟悉很多文件,直接去看

[ 本帖最后由 ynchnluiti 于 2008-10-24 18:16 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-10-24 18:19 |只看该作者
用source insight吧,把整个工程的文件导入,让工具帮你找.如果工具找不到,那基本是系统调用或者标准库函数,可以man出来

论坛徽章:
0
7 [报告]
发表于 2008-10-24 19:41 |只看该作者

回复 #1 archphoenix 的帖子

1、先在自己代码内部查找,建议你用sourceinsight把整个工程同步一下,这样看很方便,比ultraedit方便多了。
2、如果你在自己代码内部找不到,那就肯定是系统库里提供的了,通过你说的struct iphdr,这个名字来看,应该是个网络那块的结构。可以到/usr/include目下去grep。win_hate兄都已经帮你找到了,在/usr/include/linux/ip.h 中。
   对于这个,查man手册不是个好主意。

关于网络相关的一些数据结构,可以在/usr/include下去grep查找的,这个不像stat之类的东东,前者并不多,但后者一grep就如滔滔江水了

论坛徽章:
0
8 [报告]
发表于 2008-10-24 19:57 |只看该作者
Eclipse CDT可以直接Ctrl + 单击找到变量的定义

EditPlus UltraEdit之类的编辑器可以多文件查找

SourceInsignt导入工程也可以查找类型定义,如果是标准头文件,那就把标准头文件也作为一个工程添加到SI中。。

/usr/src/Linux-Headers包括所有的头文件

论坛徽章:
0
9 [报告]
发表于 2008-10-31 20:39 |只看该作者
偷个懒,麻烦给个这个grep的例子,谢谢。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
10 [报告]
发表于 2008-10-31 21:01 |只看该作者
Source insight是比较好的选择
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP