版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_29757283/article/details/77700319

KEYWORD : sys/types.h; sys/stat.h; linux; 头文件;reserve place; reserve place


2018/Apr/01 更新:
  关于 sys/***.h 的头文件,在不同平台上通过建立软连接的方式可以解决。
  建立软连接的方式可以参考本人的这篇blog ===> 获得(读取)一个文件内的所有数据的字节总数 <=== 这个链接中的  <h3>其中 和系统有关的 头文件需要做处理:</h3>  即是找到 sys/×××.h 头文件,并且创建软连接的方式。


  在查看各种编程书,源代码的时候,个人经常遇到对源代码引用的头文件的困惑。
  比如,对于 #include <stdio.h>; #include <stdlib.h>; #include <string.h>; 这种常见的头文件不以为然,自然如果编译的工具(链)没有问题,也就不会存在找不到头文件的情况。
  但是,如果遇到 #include <unistd.h> ;#include <fcntl.h> 这样的头文件就要想一想了,因为对于一个没怎么接触系统编程的人来说,实在是不熟悉这些头文件。
  要是再遇到这样的头文件: #include <sys/stat.h>; #include <sys/types.h>; 这样的头文件更是容易出问题,因为 sys 目录下的头文件并未这么简单写就可以了。

  那么,其实问题也很简单,到底linux下这些头文件都在哪里?
  相信用linux 编程的同学们都是通过 GNU 工具链来编译链接源代码的。
  比如 gcc helloworld.c -o helloworld 像这样的命令应该是比较熟悉了。
  这种情况下,明明 helloworld.c 中是有 #include <stdio.h> 这个头文件的,而在编译链接命令中并没有体现出使用这个头文件的样子嘛…..

Linux的目录结构

根目录:

  这一点要和linux 系统本身的目录结构有关系,我们知道使用 linux 一般来说是不会去关注磁盘分区的,所有的内容都在 "/" 这一 root 根目录下,

用户目录:

  比如我们用户最直接使用的,就是 /home/username/ 这一目录,它就是在根目录 "/" 下的 "home" 文件夹,而home文件夹下就是根据linux上可以有多个用户这个特点,按用户名,分为多个文件夹。如果你是 user1,那你就分的目录"/home/user1/", 这时候,我们还可以发现在 “/home/user1/” 这个目录下,系统自动分配了 “Documents/”; “Music/”; “Downloads/”; …等等这类普通常用的文件夹。
  到目前为止我举了一个 /home/ 的例子,简单说明了一下我想说的 linux 不分区的目录结构,

可执行二进制文件:

  在 linux 下工作,那就不得不提命令command这个神奇的东西了,说几个常用的命令: ls, mkdir, rm, grep, ps… 这些命令,都被放在了根目录"/"“bin/” 目录下, 也就是 “/bin/” ;可以使用 $ls /bin <- 这个命令查看一下。

  以上说了这些,是为了对 linux 的这种目录结构产生一个感性的认识。

应用程序:

  那么同样,根目录 "/" 它也为所有的应用程序有关的单独分配了一个文件夹,那就是 “usr/” 文件夹。通过 $cd /usr 可以到达该目录下。

用户安装程序:

  之所以说”为应用程序有关“,那是因为这个目录下不单单只保存应用程序。我们通过命令#apt-get install application 安装的应用程序,几乎都是安装在 “/usr/share/” 这个目录下,使用 $ls /usr/share/ 命令可以看到许多”文件夹“,其文件夹名对应的就是应用名。

用户(程序员)编写程序:

  通过命令 $cd /usr 到达该目录下, $ls -CF 可以看到 “/usr/” 目录下的文件夹和文件,注意到有 “include/” 这个文件夹,这个文件夹就是这篇文件要介绍的重点了,他就是 linux 下,GNU 编译链接的 C标准库 和 系统调用 的所有 头文件的集合。
  通过 /usr$cd include 就可以进入到这个目录下了,
  然后马上执行 /usr/include$ls -CF 来看看这个文件夹下都放了什么…… 可以看到 stdio.h; stdlib.h; string.h… 等等这些熟悉头文件都在,等等,那前面说的 “sys/stat.h; sys/tpyes.h” 这类头文件在哪里?
  这就跟平台有关系了,以Ubuntu为例,在/usr/include/ 目录下,可以看到 “x86_64-linux-gnu/” 这个目录,其实 “sys/” 这个目录相关的头文件都在这下面

> 当然,不同的计算机不同,你有可能看到的是 “x386-linux-gnu/”
(↑可能写的不太准确,自己没有32位的电脑,网上看到路径,记不太清了);
> 在树莓派上,你看到的将会是“arm-linux-gnuea…/” 这个目录;
> 而在 cygwin on windows,就是直接的“sys/” 目录!


  到目前为止,你应该是都知道说需要的 ISO C 和 POSIX 等 提供的 头文件到哪里去寻找了,
  如果在看书、看代码看到一个不熟悉的 头文件,不清楚自己电脑上有没有…这个时候使用命令↓
$find /usr/include/[theHeadfileName].h
  如果有正确的输出,就可以知道我们可以大胆地将“[theHeadfileName].h” 这个头文件包含在代码中了。


2018/Jan/09 新增:


对 GNU 编译器 和 C标准库(包括其它库)的新了解

   在学习交叉编译的时候,新了解到了一些跟编译工具链有关的知识(内容), 所以对博客做一次更新(补充)
   Mint LINUX 环境
   安装 主机(本机)编译工具链
   查看gcc 编译工具信息(的命令)
     cpp -V $>/dev/null

显示的信息

   (个人理解(解释)补充)
———— END 新增 —————————–


  在学习 linux 上实现 一个 daemon 程序时,看到的几个不熟悉的头文件,所以写了这篇 -> 怎么确定自己的编译环境有没有支持该头文件,把本人测试、修改过的 daemon 程序传到了CSDN资源中了,有兴趣的同学可以下载看看。

“一个可以在Cygwin on windows 和 Raspberry Pi 上 $make 通过的简单 daemon 例程


the end


Linux的目录结构和头文件相关;哪里找- sys/types.h, sys/stat.h相关推荐

  1. Linux socket 网络编程 常用头文件

    一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM) 提供面向连接的可靠的数据传输服务.数据被看作是字节流,无长度限制.例如FTP协议就采用这种. 2.数据报式套接字(SOCKET_D ...

  2. Linux内核目录结构(2.6版本以上的kernel)

    1.documentation: 没有内核代码,提供文档帮助. 2.arch: arch是architecture的缩写.所有与体系结构相关的代码都在这个目录以 include/asm-*/目录中.L ...

  3. 【Linux】Linux 标准目录结构

    为什么80%的码农都做不了架构师?>>>    初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程 ...

  4. Linux的目录结构与目录管理

    Linux的目录结构与目录管理 Linux目录结构: 目录创建的规则 FHS 文件系统层次化标准 指定了Linux操作系统,哪些目录是一定要具备的 /boot /bin /sbin /etc /sys ...

  5. linux生成驱动编译的头文件,嵌入式Linux字符设备驱动——5生成字符设备节点

    嵌入式Linux字符设备驱动开发流程--以LED为例 前言 留空 头文件 #include 查看系统设备类 ls /sys/class 设备类结构体 文件(路径):include/linux/devi ...

  6. 大数据技术之_01_Linux学习_01_linux的入门+VM和linux的安装+linux的目录结构+远程登录到linux服务器+vi和vim编辑器+开机、重启和用户登录注销+用户管理+用户组管理

    大数据学习之_01_Linux学习_01 1 linux的入门 1.1 Linux的介绍 2 VM和linux的安装 2.1 安装vm和Centos 2.1.1 基本说明 2.1.2 CentOS安装 ...

  7. Linux的目录结构

    版权声明:本文为博主原创文章,未经博主允许不得转载!! 欢迎访问:https://blog.csdn.net/qq_21439395/article/details/81952298 交流QQ: 82 ...

  8. Linux学习--目录结构

    ** Linux学习–目录结构 ** 一.基本介绍 linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录. 记住一句经 ...

  9. java web项目的目录结构以及各文件夹的功能是什么eclipse的web目录及各作用

    创建一个javaweb项目的大致目录结构就是这样的,因为是第一次新建,我们的目录只包含了一些基础的文件夹. 然后我们看一下他们的功能是什么. test:项目名称(也可以是其他名称,尽量和自己创建的项目 ...

最新文章

  1. 不只是华为/阿里/百度/小米/京东,AIoT已然成为资本与新兴企业都认可的赚钱方向...
  2. 【快乐水题】495. 提莫攻击
  3. kibana操作elasticsearch:查看映射关系
  4. ASP存储过程参数数据类型
  5. 选择Java加密算法第2部分–单密钥对称加密
  6. (DFS or BFS)Find The Multiple(poj1426)
  7. 联邦学习隐私保护研究进展
  8. MySQL 修改字段
  9. Airbnb搜索:Embedding表示学习
  10. HTML DOM 入门知识点总结
  11. 用Postwoman搭建团队使用的API调试工具
  12. 再见 Python!Yann LeCun 警告:深度学习需要新编程语言
  13. linq判断集合中相同元素个数_高中数学:集合与函数概念知识点汇总
  14. 如何处理tomcat默认错误页面
  15. 电子工程师最全面试题大全
  16. AxGlyph矢量绘图软件 | 绘图软件
  17. 【AI创新者】云知声梁家恩:当 AI 遇见 IoT——云知声的 AI 之路
  18. 戴维斯分校 计算机硕士,申请加州大学戴维斯分校计算机研究生的入学条件是什么?...
  19. gst 测试摄像头命令
  20. android模拟器 vt,逍遥安卓模拟器VT模式如何设置?VT模式设置流程图文分享

热门文章

  1. javascript运行时问题
  2. Windows下Oracle 11g创建数据库
  3. python常用库之base64
  4. Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
  5. 深入浅出 SpringMVC - 2 提升篇
  6. ab url 带参数 测试
  7. 【转】ora-00031:session marked for kill处理oracle中杀不掉的锁
  8. iframe和父窗体之间的互相监听方法
  9. NHibernateLinq简单的CRUD操作
  10. 【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )