linux怎么查看内核定义的结构体,Linux如何查找一个结构体的原始定义
下面以查找結(jié)構(gòu)體FILE的原始定義為例:
1、我們知道,這些定義一般都在 /usr/include下面,所以首先到達目錄 /usr/include 下面
2、用grep命令搜索 ,即grep FILE?stdio.h,可得以下結(jié)果(部分),FILE在stdio.h中定義有好多地方提到過。
#if !defined __need_FILE && !defined __need___FILE
# define __need_FILE
# define __need___FILE
#endif /* Don\"t need FILE.??*/
#if !defined __FILE_defined && defined __need_FILE
struct _IO_FILE;
typedef struct _IO_FILE FILE;
#if defined __USE_LARGEFILE64 || defined __USE_SVID || defined __USE_POSIX \
__USING_NAMESPACE_STD(FILE)
3、從上面的搜索結(jié)果可以看到,實際上是把 _IO_FILE 定義為FILE,于是又要查找 _IO_FILE的定義。
4、用grep命令,即執(zhí)行 grep \"_IO_FILE\"?*.h,得到以下結(jié)果(部分,因為全部太多了,我們要從大量的結(jié)果中找到關鍵內(nèi)容,當然也可以通過管道 二次使用grep)
_G_config.h:#define _G_HAVE_IO_FILE_OPEN 1
_G_config.h:#define _G_IO_IO_FILE_VERSION 0x20001
libio.h:struct _IO_jump_t;??struct _IO_FILE;
libio.h:??struct _IO_FILE *_sbuf;
libio.h:struct _IO_FILE {
libio.h:??struct _IO_FILE *_chain;
libio.h:#ifdef _IO_USE_OLD_IO_FILE
5、我們看到了libio.h:struct _IO_FILE { 這一行,所以知道 它是在libio.h中定義的,打開該文件,即可看到定義。
注意:有時候有些宏定義還會調(diào)用其他的宏定義,如在中有如下定義: #define S_IRUSR ?__S_IREAD ,__S_IREAD本身也是個宏,我們不知道它定義在何處,可以用之前的方法繼續(xù)尋找__S_IREAD,但有時候會在/usr/include/的子文件夾下,這時候就不好尋找了,通常我們看到?#define S_IRUSR ?__S_IREAD 這樣的定義,可以沿著此語句往代碼的前方找,看到的第一個#include文件,如,?__S_IREAD 就是在這個文件下定義的,然后查找此文件,可以看到如下聲明:#define??__S_IREAD ?0400 /*Read by owner.*/
linux內(nèi)核頭文件/usr/include/ 目錄下的.h文件中會include其它頭文件,但通常不會把調(diào)用的其它頭文件列在一起,而是include一個頭文件之后,緊接著的語句是會用到這個頭文件中的宏,或其它聲明的變量,函數(shù),結(jié)構(gòu)體等等。
而linux內(nèi)核源碼中的.c文件等會把所有調(diào)用的文件列在程序的開頭。如/usr/src/kernel/linux-2.6.38.6/mm/memory.c程序開頭如下:
#include?
#include
#include?
#include
#include
..................
總結(jié)
以上是生活随笔為你收集整理的linux怎么查看内核定义的结构体,Linux如何查找一个结构体的原始定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkpad重装系统不引导_Thin
- 下一篇: 计算机应用基础教案 马成荣,江苏省职业学