Chinaunix

标题: Linux下编程如何查询某个结构体的信息? [打印本页]

作者: shoecat    时间: 2003-12-09 16:04
标题: Linux下编程如何查询某个结构体的信息?
Linux下如何查询某个结构体的信息?比如我要查询ifreq这个结构成员的信息,用man ifreq查不到,我该这么查询呢?
作者: faquirsun    时间: 2003-12-09 16:31
标题: Linux下编程如何查询某个结构体的信息?
我也不知道,现在是直接到*.h文件里面看定义
感觉很不方便
作者: shoecat    时间: 2003-12-09 17:21
标题: Linux下编程如何查询某个结构体的信息?
可是怎么知道哪个结构体在哪个头文件中呢?
作者: zhongfangqing    时间: 2006-07-13 17:59
虽然是几年前的老贴,可是很有代表性,这个问题我也不会。期待高手来解决一下这个弱弱的问题
作者: 流氓无产者    时间: 2006-07-13 18:47
cd /usr/include/linux
grep "struct ifreq" *.h
作者: sakulagi    时间: 2006-07-13 22:55
或者用ctags之类的把头文件都分析一下
作者: sharkhuang    时间: 2006-07-13 23:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: zhongfangqing    时间: 2006-07-14 08:36
谢谢热心的朋友解答
作者: assiss    时间: 2006-07-14 09:08
我是用cscope,三步曲:
1.

  1. find /usr/include /usr/pkg/include /usr/local/include -name "*.h" > cscope.files
复制代码

2.

  1. cscope -b
复制代码

3.在vim(要编译cscope功能)中使用
:set cst "可放在~/.vimrc中
:cs add cscope.out
即可用ctrl+鼠标左键或ctrl+]来定位该结构体的定义之处。
作者: hades555    时间: 2006-07-14 10:21
请教assiss 大哥.
执行cs add cscope.out
发生
duplicate cscope database not added错误是怎么个事?
作者: hades555    时间: 2006-07-14 10:46
还一个问题.换了路径就不好用了怎么个事?
作者: hades555    时间: 2006-07-14 10:52
1   2642  /usr/include/glib-1.2/glib.h <<getpid>>
             #define getpid _getpid
   2    109  /usr/include/mysql/my_pthread.h <<getpid>>
             #define getpid() GetCurrentThreadId()
   3    108  /usr/include/mysql3/mysql/my_pthread.h <<getpid>>
             #define getpid() GetCurrentThreadId()
   4     27  /usr/include/php/main/win95nt.h <<getpid>>
             #define getpid _getpid
   5    257  /usr/include/pm_config.h <<getpid>>
             #define getpid() ((pid_t)FindTask(NULL))
   6    549  /usr/include/unistd.h <<getpid>>
             extern __pid_t getpid (void ) __THROW;
   7    105  /usr/include/wvstreams/wvpipe.h <<getpid>>
             int getpid() const { return proc.pid; };
   8    257  pm_config.h <<getpid>>
             #define getpid() ((pid_t)FindTask(NULL))
   9    549  unistd.h <<getpid>>
             extern __pid_t getpid (void ) __THROW;

第9个不是决定路径怎么个事?
作者: assiss    时间: 2006-07-14 11:01
刚才断电,VIM崩溃,查了半天原因,原来是~/.viminfo.*出问题了……删。

hades555 :
你的问题我一个都没遇见过,呵呵,你把你的操作过程写一下。
作者: hades555    时间: 2006-07-14 11:06
第一个问题是绝对路径的问题,我解决了.
cs add /usr/include/cscope.out
作者: assiss    时间: 2006-07-14 11:10
原帖由 hades555 于 2006-7-14 11:06 发表
第一个问题是绝对路径的问题,我解决了.
cs add /usr/include/cscope.out

你不会是:
cd /usr/include
find . -name "*.h" >cscope.files
cscope -b
吧?
作者: hades555    时间: 2006-07-14 11:10
第二个问题
cd /usr/include
find /usr/include -name '*.h' >cscope.files
cscope -b
cd /home
vi aaa
cs add /usr/include/cscope.out

tag getpid
出现了以下的结果
Cscope tag: getpid
   #   line  filename / context / line
   1   2642  /usr/include/glib-1.2/glib.h <<getpid>>
             #define getpid _getpid
   2    109  /usr/include/mysql/my_pthread.h <<getpid>>
             #define getpid() GetCurrentThreadId()
   3    108  /usr/include/mysql3/mysql/my_pthread.h <<getpid>>
             #define getpid() GetCurrentThreadId()
   4     27  /usr/include/php/main/win95nt.h <<getpid>>
             #define getpid _getpid
   5    257  /usr/include/pm_config.h <<getpid>>
             #define getpid() ((pid_t)FindTask(NULL))
   6    549  /usr/include/unistd.h <<getpid>>
             extern __pid_t getpid (void ) __THROW;
   7    105  /usr/include/wvstreams/wvpipe.h <<getpid>>
             int getpid() const { return proc.pid; };
   8    257  pm_config.h <<getpid>>
             #define getpid() ((pid_t)FindTask(NULL))
   9    549  unistd.h <<getpid>>
             extern __pid_t getpid (void ) __THROW;

8,9都不是绝对路径
按9
造成了按就就显示
E429: File "unistd.h" does not exist
E257: cstag: tag not found
怎么个事?
作者: hades555    时间: 2006-07-14 11:11
原帖由 assiss 于 2006-7-14 11:10 发表

你不会是:
cd /usr/include
find . -name "*.h" >cscope.files
cscope -b
吧?


find /usr/include -name "*.h" >cscope.files

我是这样做的.
作者: assiss    时间: 2006-07-14 11:20
原帖由 hades555 于 2006-7-14 11:11 发表


find /usr/include -name "*.h" >cscope.files

我是这样做的.

奇怪,我这里重复你的步骤,结果却跟你的不一样。

你看看cscope.files,里面都是绝对路径吗?
作者: hades555    时间: 2006-07-14 11:22
都是绝对路径
作者: assiss    时间: 2006-07-14 11:26
原帖由 hades555 于 2006-7-14 11:22 发表
都是绝对路径

我也没办法了。
提两个建议:
1、不要在/usr/include目录下建cscope.files和cscope.out,应该放在其它目录下
2、用:cs find s word试试。也许你的VIM加载了ctags文件。
作者: hades555    时间: 2006-07-14 11:29
不放在/usr/include下就好用了.多谢多谢多谢了
作者: hades555    时间: 2006-07-14 11:38
还有一个问题.我把cs add /home/cscope.out加到~/.vimrc里,vi打开文件的时候显示Added cscope database /home/cscope.out
Hit ENTER or type command to continue能不能不让它显示啊?
作者: gomo1234    时间: 2006-07-17 17:15
标题: tian
楼上你把cscope -b 生成的.out文件放在/root目录下.
然后在.vimrc下面添加
set cst
cscope add cscopt.out

添加到是成功了不过, 按照楼主的在vim中使用的方法, 找不到结构体的定义. 提示错误是cstag: 找不到tag




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2