3.2 文件描述符
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读写一个文件时,使用 open 或 creat 返回的文件描述符,将其作为参数传送给 read 和 write。
UNIX 系统 shell 将文件描述符 0 与进程的标准输入关联,文件描述符 1 与标准输出关联,文件描述符 2 与标准错误关联。在符合 POSIX
.1 的应用程序,应当将 0,1,2 替换成符号 STDIN_FILENO、STDOUT_FILENO 和 STDERR_FILENO 来提高可读性。这些常量在头文件 <unistd.h> 中定义。文件描述符的变化范围是 0~OPEN_MAX-1。
3.3 函数 open 和 openat
调用 open 或 openat 函数可以打开或创建一个文件。
#include <fcntl.h>
int open(const char *path, int pflag, .../*mode_t mode */);
int openat(int fd, const char *path, int oflag, ... /* mode_t mode */);
… 表示余下的参数的数量及其类型是可变的。对于 open 函数而言,仅当创建新文件时才使用最后一个参数。
path 参数是要打开或创建文件的名字。oflag 参数可用来说明此函数的多个选项,用下列一个或多个常量进行或运算构成 oflag 参数。
O_RDONLY 只读打开
O_WRONLY 只写打开
O_EDWR 读写打开