下面以查找结构体FILE的原始定义为例:

1、我们知道,这些定义一般都在 /usr/include下面,所以首先到达目录 /usr/include 下面

2、用grep命令搜索 ,即grep FILE stdio.h,可得以下结果(部分),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、从上面的搜索结果可以看到,实际上是把 _IO_FILE 定义为FILE,于是又要查找 _IO_FILE的定义。

4、用grep命令,即执行 grep \"_IO_FILE\" *.h,得到以下结果(部分,因为全部太多了,我们要从大量的结果中找到关键内容,当然也可以通过管道 二次使用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中定义的,打开该文件,即可看到定义。

注意:有时候有些宏定义还会调用其他的宏定义,如在中有如下定义: #define S_IRUSR  __S_IREAD ,__S_IREAD本身也是个宏,我们不知道它定义在何处,可以用之前的方法继续寻找__S_IREAD,但有时候会在/usr/include/的子文件夹下,这时候就不好寻找了,通常我们看到 #define S_IRUSR  __S_IREAD 这样的定义,可以沿着此语句往代码的前方找,看到的第一个#include文件,如, __S_IREAD 就是在这个文件下定义的,然后查找此文件,可以看到如下声明:#define  __S_IREAD  0400 /*Read by owner.*/

linux内核头文件/usr/include/ 目录下的.h文件中会include其它头文件,但通常不会把调用的其它头文件列在一起,而是include一个头文件之后,紧接着的语句是会用到这个头文件中的宏,或其它声明的变量,函数,结构体等等。

而linux内核源码中的.c文件等会把所有调用的文件列在程序的开头。如/usr/src/kernel/linux-2.6.38.6/mm/memory.c程序开头如下:

#include

#include

#include

#include

#include

..................

linux怎么查看内核定义的结构体,Linux如何查找一个结构体的原始定义相关推荐

  1. linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果

    linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果 references [How to Check the IP Address in Li ...

  2. [ Linux ] 如何查看内核 Kernel 版本(查多个Kernel的方法)

    上图来源于:turnoff.us,描述了Linux内核结构,有兴趣的同学可以访问原址看看 文章目录 什么是 Linux内核 查看 Linux内核Kernel 的场景情况 查看 Kernel 的几种方式 ...

  3. 如果查看linux内核,linux怎么查看内核版本

    有朋友在使用Linux的过程中要查看Linux的内核版本号,这要怎么看呢?也有朋友文要怎么查看linux系统版本信息呢?下面和小编一起了解一下吧. 一.查看linux内核版本号 1:登录linux,在 ...

  4. linux怎样查看内核参数,Linux 实例如何查看和修改 Linux 实例内核参数?

    <操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...

  5. c语言用结构体交换名字,结构体赋值给另一个 结构体 如何定义 求大神了

    定义了一个 输入学生信息的 结构体 通过比较 总成绩  排名   各个信息都要交换信息,我想定义另一个结构体 盛放它  完成交换 #include struct Student//定义储存学生信息的结 ...

  6. linux 怎么查看内核日志,怎样查看Linux系统日志?

    原标题:怎样查看Linux系统日志? 很多企业都会使用Linux系统,审计Linux系统日志可以提供有关网络事件的重要信息.高效查看Linux系统日志对工作而言十分重要,以下是常用命令 # uname ...

  7. linux如何查看系统装在哪个盘,linux系统查看磁盘空间

    linux系统查看磁盘空间 发布时间:2008-09-08 17:09:20   作者:佚名   我要评论 一.df 命令: df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这 ...

  8. linux怎么查看内容并显示行号,linux中查看文件时显示行号

    Linux中查看文件时显示行号 [[email protected] etc]# cat -n rsyslog.conf              //显示所有行号(包括空行) [[email pro ...

  9. linux中查看隐藏文件夹_如何在Linux中隐藏图像中的文件或文件夹

    linux中查看隐藏文件夹 If other people use your Linux PC from time to time, you can hide files and folders fr ...

最新文章

  1. Android_微信_设置
  2. 教你如何一步步将项目部署到Github
  3. Jquery 【select 通过value来寻找对应的项name】
  4. 使用SAP云平台portal service之前,需要做好哪些准备
  5. Windows下的Qt Creator的安装
  6. aws lambda_四处奔走:初学者遇到AWS Lambda
  7. JavaScript高级语法打包 - babel插件安装配置报错!Error: Cannot find module ‘@babel/preset-preset.env‘
  8. C++基础18-抽象类-电脑组装练习
  9. [OC]TableView使用
  10. android源码分析(一) - 语言切换机制
  11. mysql dns反说明的成绩
  12. 第四篇 SpringBoot 2 x整合MyBatis
  13. leetcode扔鸡蛋问题总结
  14. mfc 通过按钮发弹幕_BiliBiliChat
  15. c语言实现开方,c语言开方(c语言开平方代码)
  16. 9个常用的免费高清壁纸图库网站
  17. Windows驱动的加载顺序
  18. 读书笔记|| 类继承
  19. 如何实现在退休时有足够的钱供老年任性花费?(复利年金通胀综合案例)
  20. 职业生涯人物访谈作业格式

热门文章

  1. 什么是负边沿触发_用好示波器必须学会的知识:触发方式
  2. 预处理阶乘和阶乘逆元_计算数字的阶乘| 8086微处理器
  3. icmp消息类型报告传输_ICMP消息的类型和ICMP消息格式
  4. Ubuntu18 Win10搭建Caffe训练识别mnist手写数字demo
  5. java数组怎么倒循环_java – 用于数组倒计时的反向循环
  6. 软件工程详细设计说明书_软件工程导论知识点梳理之简答题
  7. 你需要administrators提供的权限才能删除_终于解决了:你需要来自XXX的权限才能对此文件进行更改
  8. vscode如何创建一个go项目_如何用手机创建一个网站
  9. mysql断电不受影响db引擎_一次服务器断电,造成innodb引擎表(日志表)损坏的解决办法...
  10. datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理