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 查出数据定义所在的行号
:#ifndef __uint32_t_defined
:typedef unsigned int uint32_t;
:# 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系统编程(2)——文件与IO之系统调用与文件IO操作
系统调用是指操作系统提供给用户程序的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得得操作系统内核提供的特殊服务.在linux中用户程序不能直接访部内核 ...
- Linux系统编程(5)——文件与IO之mmap函数
mmap系统调用它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作.而Posix或系统V的共享内存IPC则纯粹用于共享目的,mmap()实现共享内存也是其主要应用之一. ...
- Linux系统编程(3)——文件与IO之fcntl函数
linux文件I/O用:open.read.write.lseek以及close函数实现了文件的打开.读写等基本操作.fcntl函数可以根据文件描述词来操作文件. 用法: int fcntl(int ...
- Linux系统编程(4)——文件与IO之ioctl函数
ioctl是设备驱动程序中对设备的I/O通道进行管理的函数.所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率.马达的转速等等.它的参数个数如下:int ioctl(int ...
- Linux系统编程---实现目录或者文件拷贝
关于拷贝文件,前面写过一个例子:点击打开链接 ,可以看看,实现cp命令. 这次我们实现一个目录和文件的拷贝,综合点. #include <stdio.h> #include <fcn ...
- 《Linux系统编程(第2版)》
<Linux系统编程(第2版)> 基本信息 作者: (美)Robert Love 译者: 祝洪凯 李妹芳 付途 出版社:人民邮电出版社 ISBN:9787115346353 上架时间:20 ...
- linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...
- Linux C 程序 文件操作(Linux系统编程)(14)
文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...
随机推荐
- inotify软件部署及实时同步
声明:博主使用的是CentOS6.9的系统 参考资料: https://github.com/rvoicilas/inotify-tools/wiki http://www.ibm.com/devel ...
- beautifulSoup模块
这个库用来对网页进行解析功能,十分强大,有了它我们可以减少对正则的使用,也能顺利的从网页源码中拿到我们要的值.他是一个灵活,方便的网页解析库,处理高效,支持多种解析器. 这个库把HTML源码解析成对象 ...
- 从源代码到Runtime发生的重排序
源代码和Runtime时执行的代码很可能不一样,这是因为编译器.处理器常常会为了追求性能对改变执行顺序.然而改变顺序执行很危险,很有可能使得运行结果和预想的不一样,特别是当重排序共享变量时. 从源 ...
- dynamic programming 学习
这是看到一位大神,写的关于dynamic programming的博客,认为很好.简单分析下.然后给出链接. 背景问题就是 有一个国家,全部的国民都很老实憨厚,某天他们在自己的国家发现了十座金矿.而且 ...
- 豌豆夹Redis解决方式Codis源代码剖析:Proxy代理
豌豆夹Redis解决方式Codis源代码剖析:Proxy代理 1.预备知识 1.1 Codis Codis就不详细说了,摘抄一下GitHub上的一些项目描写叙述: Codis is a proxy b ...
- Java深入 - MyBatis的经常用法
MyBatis我们这篇文章主要记录一些经常使用的操作方法.这样在开发和使用的过程中这篇文章能够当做工具书来使用. MyBatis的数据源配置 <bean id="dataSource& ...
- 谈谈调用腾讯云【OCR-通用印刷体识别】Api踩的坑
一.写在前面 最近做项目需要用到识别图片中文字的功能,本来用的Tesseract这个写的,不过效果不是很理想. 随后上网搜了一下OCR接口,就准备使用腾讯云.百度的OCR接口试一下效果.不过这个腾讯云 ...
- 基于MATLAB边缘检测算子的实现
基于MATLAB边缘检测算子的实现 作者:lee神 1. 概述 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要 ...
- lock锁速记
1.Lock关键字主要实现锁互斥,确保一个线程A在请求此操作时不会被其线程B请求中断(假设A先请求并在没有未完成的操作情况下申请了此互斥锁).lock的参数必须是基于引用类型的对象,不要是基本类型像b ...
- JavaSe:代码块执行顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. //普通代码块:在方法或语句中出现 ...