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、进程管理和进程通信等。常量定义则可以用于对文件进行访问控制和文件位置调整的操作。