linux系统编程快速定位头文件的技巧之强大的grep命令
这个技巧来自于我的实际开发碰到的:
inet_addr这个函数用于把ip地址转成网络字节序,他的原型:in_addr_t inet_addr(const char *cp);
返回值为一个in_addr_t的类型,很显然这不是一个c语言的标准数据类型,想搞清楚他到底是什么类型,肯定要找到头文件,在linux系统上,头文件一般放在/usr/include下面,但是这下面非常多的头文件,根本不知道是哪个,所以:
1,第一次:grep in_addr_t /usr/include/*.h 没有结果,说明不在/usr/include的第一层目录中
2,第二次: grep "in_addr_t" /usr/include/*/*.h, 这一次出现很多结果
/usr/include/arpa/inet.h:extern in_addr_t inet_addr (const char *__cp) __THROW; /usr/include/arpa/inet.h:extern in_addr_t inet_lnaof (struct in_addr __in) __THROW; /usr/include/arpa/inet.h:extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host) /usr/include/arpa/inet.h:extern in_addr_t inet_netof (struct in_addr __in) __THROW; /usr/include/arpa/inet.h:extern in_addr_t inet_network (const char *__cp) __THROW; /usr/include/arpa/inet.h:extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW; /usr/include/netinet/in.h:typedef uint32_t in_addr_t; /usr/include/netinet/in.h: in_addr_t s_addr; /usr/include/netinet/in.h:#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0) /usr/include/netinet/in.h:#define IN_CLASSB(a) ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000) /usr/include/netinet/in.h:#define IN_CLASSC(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000) /usr/include/netinet/in.h:#define IN_CLASSD(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000) /usr/include/netinet/in.h:#define IN_EXPERIMENTAL(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000) /usr/include/netinet/in.h:#define IN_BADCLASS(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000) /usr/include/netinet/in.h:#define INADDR_ANY ((in_addr_t) 0x00000000) /usr/include/netinet/in.h:#define INADDR_BROADCAST ((in_addr_t) 0xffffffff) /usr/include/netinet/in.h:#define INADDR_NONE ((in_addr_t) 0xffffffff) /usr/include/netinet/in.h:# define INADDR_LOOPBACK ((in_addr_t) 0x7f000001) /* Inet 127.0.0.1. */ /usr/include/netinet/in.h:#define INADDR_UNSPEC_GROUP ((in_addr_t) 0xe0000000) /* 224.0.0.0 */ /usr/include/netinet/in.h:#define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) /* 224.0.0.1 */ /usr/include/netinet/in.h:#define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) /* 224.0.0.2 */ /usr/include/netinet/in.h:#define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */
3,过滤,grep "in_addr_t" /usr/include/*/*.h | grep "typedef"
用typedef过滤一次,或者用define等关键字, 这种数据类型肯定是标准类型的别名定义,出现下面这条数据,他是uint32_t这个数据类型的别名
/usr/include/netinet/in.h:typedef uint32_t in_addr_t;
4,下一步,肯定是找uint32_t的定义类型 grep "uint32_t" /usr/include/*/*.h | grep "typedef",出现结果:
/usr/include/drm/drm.h:typedef uint32_t __u32; /usr/include/netinet/in.h:typedef uint32_t in_addr_t;
这不是我想要的
5,grep "uint32_t" /usr/include/*.h | grep "typedef"
/usr/include/elf.h:typedef uint32_t Elf32_Word; /usr/include/elf.h:typedef uint32_t Elf64_Word; /usr/include/elf.h:typedef uint32_t Elf32_Addr; /usr/include/elf.h:typedef uint32_t Elf32_Off; /usr/include/stdint.h:typedef unsigned int uint32_t;
这才是我想要的, uint32_t其实是unsigned int类型
6,grep -n "uint32_t" /usr/include/stdint.h 查出数据定义所在的行号
50:#ifndef __uint32_t_defined 51:typedef unsigned int uint32_t; 52:# define __uint32_t_defined
linux系统编程快速定位头文件的技巧之强大的grep命令相关推荐
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
Linux系统的I/O也就是一般所说的低级I/O--操作系统提供的基本IO服务,与os绑定,特定于Linux平台.而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头 ...
- 嵌入式Linux系统编程学习之八基于文件指针的文件操作
文章目录 前言 一.文件的创建.打开与关闭 二.读写文件 三.文件定位 四.标准输入/输出流 五.目录操作 前言 对文件进行操作有打开文件.关闭文件.读写文件. 文件指针:每打开一个文件,就返 ...
- Linux系统编程入门2——makefile文件的使用
文章目录 前言 Makefile的使用 makefile规则 实例演示 文件 制作makefile文件 执行Makefile文件 工作原理 检查更新 变量使用 自定义变量 预定义变量 获取变量的值 模 ...
- linux系统io编程,Linux系统编程(1) —— 文件IO
本文主要对Linux系统中文件I/O的基本操作进行说明. 在Linux系统编程中,对文件进行处理的流程,通常是: 打开文件 读写文件 关闭文件 Linux内核对每一个进程维护一个打开的文件列表, 该文 ...
- 黑马程序员-Linux系统编程-01
课程链接 01-Linux命令基础习惯-Linux系统编程_哔哩哔哩_bilibili 课程重点笔记 01-linux命令基础习惯 终端 终端:一切输入.输出的总称,因此终端并不是一定指的是命令行,只 ...
- linux查看pid对应的进程,linux系统中快速查看进程pid的方法
linux系统中快速查看进程pid的方法 一个很简单的'命令,pgrep,可以迅速定位包含某个关键字的进程的pid:使用这个命令,再也不用ps aux 以后去对哪个进程的pid了 用法: pgrep ...
- Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】
linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...
- linux系统编程——文件编程
linux系统编程--文件编程 文章目录 linux系统编程--文件编程 一.如何创建.修改一个文件 二.linux系统调用的API 三.文件描述符 四.linux系统调用 1.创建文件-creat ...
- 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)
文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...
最新文章
- Java练习 SDUT-2737_小鑫の日常系列故事(六)——奇遇记
- qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
- sql2008安装包_数据库SQL2008下载与安装图文详解
- gj9 迭代器和生成器
- Python回调函数
- 实现input框的全选和清空
- Vue中生成二维码的一种方式—vue-qr
- [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
- php 投票 排序,关于phpcms v9投票模块选项排序问题修改_PHP教程
- Windows Azure 入门系列课程Windows Azure 入门系列课程
- 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
- Linux 下把服务设置自启动
- java实现医嘱管理系统_Chis5.0医嘱管理系统业务使用手册
- 微信获取unionid
- iPS细胞移植最新进展
- 学计算机理论课要记笔记吗,学生应该用笔记本电脑记笔记吗?
- 修图教程:为照片增加云雾效果
- L1-084 拯救外星人 C语言
- sslcontext java_java – SSLContext初始化
- 关于ftp操作中被动模式(Passive Mode)是什么意思?