“本章说明了UNIX系统提供的基本I/O函数。因为read和write都在内核执行,所以称这些函数为不带缓冲的I/O函数。在只使用read和write情况下,我们观察了不同的I/O长度对读文件所需时间的影响。我们也观察了许多将已写入的数据冲洗到磁盘上的方法,以及它们对应用程序性能的影响。
在说明多个进程对同一文件进行追加写操作以及多个进程创建同一文件时,本章介绍了原子操作。也介绍了内核用来共享打开文件信息的数据结构。”
本章介绍的打开文件的内核数据结构可以说是操作系统中最重要的部分之一。
3.2 文件描述符
3.3 函数open和openat
今后将碰到很多和函数xxx类似的、名为xxxat的函数,它们的作用是:1) 让线程可以使用相对路径名打开目录中的文件;2) 可以避免time-of-check-to-time-of-use错误。
time-of-check-to-time-of-use(TOCTTOU)错误说明了原子操作的必要性。
3.4 函数create
3.5 函数 close
当一个进程终止时,内核自动关闭它所有打开的文件。很多程序都利用了这一功能而不显式地用close关闭打开的文件。
3.6 函数 lseek
函数名字中的l表示长整形。在C语言引入长整形之前,用函数seek和tell提供类似功能。