-
<*.h>
(一般头文件)概述- 在Linux中,以
<*.h>
形式(比如<stdio.h>
、<stdlib.h>
等)的头文件包含了许多基本的函数声明、宏定义和类型定义等内容。 - 功能用途
- 这些头文件提供了标准C/C++库函数的接口声明。例如,
<stdio.h>
提供了标准输入输出函数(如printf
、scanf
)的声明。当你在程序中包含<stdio.h>
后,编译器就知道printf
函数的参数类型和返回值类型等信息,这样才能正确地编译使用printf
函数的代码。 - 还包含一些常用的类型定义。例如,
<stdlib.h>
中定义了size_t
类型,它是一种无符号整数类型,用于表示对象的大小等情况。
- 这些头文件提供了标准C/C++库函数的接口声明。例如,
- 来源与位置
- 这些头文件一部分是C标准库头文件,它们是C语言标准规定的,在不同的Linux发行版以及不同的编译器环境下基本保持一致。其实现通常位于系统的标准库目录中,如
/usr/include
目录下。
- 这些头文件一部分是C标准库头文件,它们是C语言标准规定的,在不同的Linux发行版以及不同的编译器环境下基本保持一致。其实现通常位于系统的标准库目录中,如
- 在Linux中,以
-
<sys/*.h>
(系统特定头文件)概述<sys/*.h>
形式的头文件(如<sys/types.h>
、<sys/socket.h>
)主要用于系统相关的功能。- 功能用途
- 提供系统调用相关的定义。例如,
<sys/types.h>
包含了基本的系统数据类型定义,像pid_t
(用于表示进程ID的数据类型)等。这些类型是在进行系统调用(如fork
系统调用创建进程,pid_t
用于获取新进程的ID)时需要用到的。 - 对于网络编程等系统级别的编程任务,
<sys/socket.h>
是必不可少的。它提供了套接字相关的函数声明(如socket
、bind
、listen
等函数)和相关的结构体定义(如sockaddr
结构体),用于实现网络通信。
- 提供系统调用相关的定义。例如,
- 来源与位置
- 这些头文件与操作系统内核紧密相关,是Linux系统特有的接口。它们通常也是位于
/usr/include/sys
目录下,这些头文件的内容依赖于Linux内核的实现细节。
- 这些头文件与操作系统内核紧密相关,是Linux系统特有的接口。它们通常也是位于
-
两者的主要区别
- 功能范畴
<*.h>
主要侧重于提供标准库级别的功能,用于处理如文件操作(<stdio.h>
)、字符串处理(<string.h>
)、数学计算(<math.h>
)等相对通用的编程任务,这些功能在不同的操作系统上可能有类似的实现。<sys/*.h>
主要用于访问系统级别的资源和功能,如进程管理、系统资源控制、网络通信等,这些功能与操作系统内核紧密相连,具有较强的系统特定性。
- 使用场景
- 当你编写一个简单的C程序,只需要进行基本的输入输出、数学计算等操作时,更多地会使用
<*.h>
头文件。例如,写一个计算圆面积的程序,可能只需要包含<stdio.h>
(用于输入输出半径值和输出面积结果)和<math.h>
(用于计算圆面积的数学公式πr²
)。 - 当你编写涉及系统底层操作的程序,如开发一个网络服务器或者进程监控工具时,就需要使用
<sys/*.h>
头文件。例如,开发一个简单的TCP服务器程序,需要包含<sys/socket.h>
来创建套接字并进行网络通信相关操作,还可能需要包含<sys/types.h>
和<sys/stat.h>
等头文件来处理文件描述符和文件状态等相关信息。
- 当你编写一个简单的C程序,只需要进行基本的输入输出、数学计算等操作时,更多地会使用
- 功能范畴