.hLinux 下的 unistd.h 头文件功能简介

1. 简介

在 Linux 系统中,unistd.h 是一个重要的系统头文件,它包含了许多系统调用函数的声明,也定义了一些常量、类型和函数原型。本文将介绍这个头文件中常用的函数和常量。

2. 函数声明

2.1 close 关闭文件描述符

关闭指定的文件描述符,释放相应的系统资源。函数原型如下:

int close(int fd);

其中,fd 为待关闭的文件描述符。如果函数执行成功,返回 0;否则,返回 -1。

2.2 read 读取文件内容

从指定的文件描述符中读取数据,并将读取的数据存储到指定的缓冲区中。函数原型如下:

ssize_t read(int fd, void *buf, size_t count);

其中,fd 为待读取的文件描述符,buf 为存储读取数据的缓冲区,count 为待读取的字节数。

函数返回值为读取的字节数,若返回值为 0,表示已经到达文件末尾;若返回值为 -1,表示读取失败。

2.3 write 写入文件内容

向指定的文件描述符中写入数据。函数原型如下:

ssize_t write(int fd, const void *buf, size_t count);

由于函数具有原子性,因此写入的字节数可能少于指定的字节数,或者返回值为 -1(写入失败)。

2.4 execve 执行程序

用指定的参数替换当前进程的映像,然后开始执行。

int execve(const char *filename, char *const argv[], char *const envp[]);

其中,filename 为程序路径名,argv 为参数列表,envp 为环境变量列表。

2.5 fork 创建子进程

创建一个新的进程(子进程)。

pid_t fork(void);

父进程和子进程的执行流是分开的,父进程通过 pid 获得子进程的 PID,而子进程则通过返回值得到 0。

2.6 pipe 创建管道

创建一对匿名管道,实现进程间通信。

int pipe(int pipefd[2]);

参数 pipefd 是返回的进程通信的两个文件描述符,它们分别代表读端与写端。

3. 常量定义

3.1 SEEK_SET, SEEK_CUR, SEEK_END 文件偏移量相对位置

unistd.h 中定义了文件偏移量相对位置的常量,用于调整文件读写位置:

#define SEEK_SET 0    /* 文件开头 */

#define SEEK_CUR 1 /* 文件当前位置 */

#define SEEK_END 2 /* 文件结尾 */

3.2 STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO 标准文件描述符

unistd.h 中定义了三个标准文件描述符的常量:

#define STDIN_FILENO  0    /* 标准输入 */

#define STDOUT_FILENO 1 /* 标准输出 */

#define STDERR_FILENO 2 /* 标准错误 */

3.3 F_OK, R_OK, W_OK, X_OK 文件访问模式

文件访问模式用于测试指定的文件是否存在、是否可读、是否可写和是否可执行。

#define F_OK 0    // 测试文件是否存在

#define R_OK 4 // 测试文件是否可读

#define W_OK 2 // 测试文件是否可写

#define X_OK 1 // 测试文件是否可执行

4. 总结

本文对 unistd.h 头文件中常用的函数和常量进行了介绍。这个头文件中的函数都是操作系统调用函数,可以用来完成一些底层的操作,如文件 I/O、进程管理和进程通信等。常量定义则可以用于对文件进行访问控制和文件位置调整的操作。

操作系统标签