不带缓冲的文件I/O之引言
程序员文章站
2024-01-02 09:38:34
...
说明:这是不带缓冲的文件I/O系列笔记的引言部分,其它更多内容将在后面陆续更新。另外,更详细的内容请参考《UNIX环境高级编程》第3章 -- 文件I/O。
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数,变化范围是 0~OPEN_MAX-1。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,就使用 open 或 creat 返回的文件描述符标识该文件,将其作为参数传送给 read 或 write函数。
按照惯例,UNIX 系统用 0、1 和 2 分别关联标准输入、标准输出和标准错误。但为了提高可读性,应当用在头文件 <unistd.h> 中定义的符号常量 STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO 来代替。
通常所用的文件操作函数是标准I/O函数,它们是带缓冲的。所谓不带缓冲,指的是每个read 和 write 都调用内核中的一个系统调用。只要涉及在多个进程间共享资源,原子操作的概念就变得非常重要。我们将通过文件 I/O 和 open 函数的参数来讨论此概念。
对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数,变化范围是 0~OPEN_MAX-1。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读、写一个文件时,就使用 open 或 creat 返回的文件描述符标识该文件,将其作为参数传送给 read 或 write函数。
按照惯例,UNIX 系统用 0、1 和 2 分别关联标准输入、标准输出和标准错误。但为了提高可读性,应当用在头文件 <unistd.h> 中定义的符号常量 STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO 来代替。
通常所用的文件操作函数是标准I/O函数,它们是带缓冲的。所谓不带缓冲,指的是每个read 和 write 都调用内核中的一个系统调用。只要涉及在多个进程间共享资源,原子操作的概念就变得非常重要。我们将通过文件 I/O 和 open 函数的参数来讨论此概念。