linux怎么查看内核定义的结构体,Linux如何查找一个结构体的原始定义
下面以查找结构体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如何查找一个结构体的原始定义相关推荐
- linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果
linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果 references [How to Check the IP Address in Li ...
- [ Linux ] 如何查看内核 Kernel 版本(查多个Kernel的方法)
上图来源于:turnoff.us,描述了Linux内核结构,有兴趣的同学可以访问原址看看 文章目录 什么是 Linux内核 查看 Linux内核Kernel 的场景情况 查看 Kernel 的几种方式 ...
- 如果查看linux内核,linux怎么查看内核版本
有朋友在使用Linux的过程中要查看Linux的内核版本号,这要怎么看呢?也有朋友文要怎么查看linux系统版本信息呢?下面和小编一起了解一下吧. 一.查看linux内核版本号 1:登录linux,在 ...
- linux怎样查看内核参数,Linux 实例如何查看和修改 Linux 实例内核参数?
<操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...
- c语言用结构体交换名字,结构体赋值给另一个 结构体 如何定义 求大神了
定义了一个 输入学生信息的 结构体 通过比较 总成绩 排名 各个信息都要交换信息,我想定义另一个结构体 盛放它 完成交换 #include struct Student//定义储存学生信息的结 ...
- linux 怎么查看内核日志,怎样查看Linux系统日志?
原标题:怎样查看Linux系统日志? 很多企业都会使用Linux系统,审计Linux系统日志可以提供有关网络事件的重要信息.高效查看Linux系统日志对工作而言十分重要,以下是常用命令 # uname ...
- linux如何查看系统装在哪个盘,linux系统查看磁盘空间
linux系统查看磁盘空间 发布时间:2008-09-08 17:09:20 作者:佚名 我要评论 一.df 命令: df 是来自于coreutils 软件包,系统安装时,就自带的:我们通过这 ...
- linux怎么查看内容并显示行号,linux中查看文件时显示行号
Linux中查看文件时显示行号 [[email protected] etc]# cat -n rsyslog.conf //显示所有行号(包括空行) [[email pro ...
- linux中查看隐藏文件夹_如何在Linux中隐藏图像中的文件或文件夹
linux中查看隐藏文件夹 If other people use your Linux PC from time to time, you can hide files and folders fr ...
最新文章
- Android_微信_设置
- 教你如何一步步将项目部署到Github
- Jquery 【select 通过value来寻找对应的项name】
- 使用SAP云平台portal service之前,需要做好哪些准备
- Windows下的Qt Creator的安装
- aws lambda_四处奔走:初学者遇到AWS Lambda
- JavaScript高级语法打包 - babel插件安装配置报错!Error: Cannot find module ‘@babel/preset-preset.env‘
- C++基础18-抽象类-电脑组装练习
- [OC]TableView使用
- android源码分析(一) - 语言切换机制
- mysql dns反说明的成绩
- 第四篇 SpringBoot 2 x整合MyBatis
- leetcode扔鸡蛋问题总结
- mfc 通过按钮发弹幕_BiliBiliChat
- c语言实现开方,c语言开方(c语言开平方代码)
- 9个常用的免费高清壁纸图库网站
- Windows驱动的加载顺序
- 读书笔记|| 类继承
- 如何实现在退休时有足够的钱供老年任性花费?(复利年金通胀综合案例)
- 职业生涯人物访谈作业格式
热门文章
- 什么是负边沿触发_用好示波器必须学会的知识:触发方式
- 预处理阶乘和阶乘逆元_计算数字的阶乘| 8086微处理器
- icmp消息类型报告传输_ICMP消息的类型和ICMP消息格式
- Ubuntu18 Win10搭建Caffe训练识别mnist手写数字demo
- java数组怎么倒循环_java – 用于数组倒计时的反向循环
- 软件工程详细设计说明书_软件工程导论知识点梳理之简答题
- 你需要administrators提供的权限才能删除_终于解决了:你需要来自XXX的权限才能对此文件进行更改
- vscode如何创建一个go项目_如何用手机创建一个网站
- mysql断电不受影响db引擎_一次服务器断电,造成innodb引擎表(日志表)损坏的解决办法...
- datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理