这个技巧来自于我的实际开发碰到的:

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命令相关推荐

  1. 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头 ...

  2. 嵌入式Linux系统编程学习之八基于文件指针的文件操作

    文章目录 前言 一.文件的创建.打开与关闭 二.读写文件 三.文件定位 四.标准输入/输出流 五.目录操作 前言   对文件进行操作有打开文件.关闭文件.读写文件.   文件指针:每打开一个文件,就返 ...

  3. Linux系统编程入门2——makefile文件的使用

    文章目录 前言 Makefile的使用 makefile规则 实例演示 文件 制作makefile文件 执行Makefile文件 工作原理 检查更新 变量使用 自定义变量 预定义变量 获取变量的值 模 ...

  4. linux系统io编程,Linux系统编程(1) —— 文件IO

    本文主要对Linux系统中文件I/O的基本操作进行说明. 在Linux系统编程中,对文件进行处理的流程,通常是: 打开文件 读写文件 关闭文件 Linux内核对每一个进程维护一个打开的文件列表, 该文 ...

  5. 黑马程序员-Linux系统编程-01

    课程链接 01-Linux命令基础习惯-Linux系统编程_哔哩哔哩_bilibili 课程重点笔记 01-linux命令基础习惯 终端 终端:一切输入.输出的总称,因此终端并不是一定指的是命令行,只 ...

  6. linux查看pid对应的进程,linux系统中快速查看进程pid的方法

    linux系统中快速查看进程pid的方法 一个很简单的'命令,pgrep,可以迅速定位包含某个关键字的进程的pid:使用这个命令,再也不用ps aux 以后去对哪个进程的pid了 用法: pgrep ...

  7. Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】

    linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...

  8. linux系统编程——文件编程

    linux系统编程--文件编程 文章目录 linux系统编程--文件编程 一.如何创建.修改一个文件 二.linux系统调用的API 三.文件描述符 四.linux系统调用 1.创建文件-creat ...

  9. 【Linux | 系统编程】Linux系统编程(文件、进程线程、进程间通信)

    文章目录 Linux系统编程 文件IO open/close函数 read/write函数 文件描述符 阻塞.非阻塞 fcntl函数 lseek函数 传入传出参数 文件系统 文件存储 文件操作 sta ...

最新文章

  1. Java练习 SDUT-2737_小鑫の日常系列故事(六)——奇遇记
  2. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
  3. sql2008安装包_数据库SQL2008下载与安装图文详解
  4. gj9 迭代器和生成器
  5. Python回调函数
  6. 实现input框的全选和清空
  7. Vue中生成二维码的一种方式—vue-qr
  8. [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
  9. php 投票 排序,关于phpcms v9投票模块选项排序问题修改_PHP教程
  10. Windows Azure 入门系列课程Windows Azure 入门系列课程
  11. 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
  12. Linux 下把服务设置自启动
  13. java实现医嘱管理系统_Chis5.0医嘱管理系统业务使用手册
  14. 微信获取unionid
  15. iPS细胞移植最新进展
  16. 学计算机理论课要记笔记吗,学生应该用笔记本电脑记笔记吗?
  17. 修图教程:为照片增加云雾效果
  18. L1-084 拯救外星人 C语言
  19. sslcontext java_java – SSLContext初始化
  20. 关于ftp操作中被动模式(Passive Mode)是什么意思?

热门文章

  1. 爬取30亿人脸被600家执法机构使用,这家公司揭美国数据隐私老底
  2. 傅盛:AI是企业弯道超车的机会,大家在同一起跑线上
  3. 焦点分析 | 平头哥的首颗 AI 芯片对阿里云来说意味着什么?
  4. 2018年中国城市用电量30强
  5. 机器学习将影响客户互动的8种方式
  6. SAP MM 如何通过SAP User ID拿到User的基本信息?
  7. 你可能会错过的3个重要AI趋势
  8. AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天
  9. 最前线丨新零售结果、AT暗战,今年的618都讲了哪些故事
  10. 打造一个宇宙 星系模拟产生对宇宙进化惊人见解