1 文件描述符
文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。将其作为参数传送给 read 或 write等操作。
UNIX 系统 shell 使用文件描述符 0 与进程的标准输入相关联,文件描述符 1 与进程的标准输出相关联,文件描述符 2 与进程的标准出错输出相关联。
2 不带缓冲的 I/O 函数
术语不带缓冲指的是每个 read 或 write 都调用内核中的一个系统调用,即user态不存在缓冲区存在。
2.1 open 函数
#include <fcntl.h>
int open(const char *pathname, int oflag, ... /* mode_t mode */);
#include <fcntl.h>
int open(const char *pathname, int oflag, ... /* mode_t mode */);
对于 open 函数而言,仅当创建新文件时才使用第三个参数。
pathname 是要打开或创建文件的名字。
oflag 参数用于说明此函数的多个选项。用下列一个或多个常量进行“或”运算构成 oflag 参数(这些常量定义在 <fcntl.h> 头文件中)。
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读、写打开
这三个常量中必须指定一个且只能指定一个。下列常量则是可选的:
O_APPEND 每次写时都追加到文件的尾端。
O_CREAT 若文件不存在,则创建它。使用此选项时,需要第三个参数 mode,用于指定该新文件的访问权限位。
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则会出错。用此可以测试一个文件是否存在,如果不存在,则创建此文件。
O_TRUNC 如果此文件存在,而且为只写或者读写成功打开,则将其长度截短为 0.
O_NOCTTY 如果 pathname 指的是终端设备,则不将该设备分配为此进程的控制终端。
<