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 读写打开