title: 文件IO–fileIO
date: 2020-10-12 10:58:48
tags:
文件IO简介
1.文件IO也称不带缓冲的I/O(unbuffered)。不带缓冲指的是每个read, write都调用内核中的一个系统调用。
2.遵循POSIX相关标准,任何兼容POSIX标准的操作系统上都支持文件I/O。
3.读写文件时, 每次操作都会执行相关系统调用, 好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销。
原子操作
–> 打开文件 + 移动到末尾
考虑一个进程,它将数据添加到一个文件尾端。早期的 unix版本并不支持open的O_APPEND选项,
if (lseek(fd, 0L, 2) < 0)
err_sys("lseek error");
if (write(fd, buff, 100) != 100)
err_sys("write error");
以上情况,若两个进程A和B对同一文件进行添加操作。每个进程都打开了该文件,但未使用O_APPEND标志。
每个进程都有它自己的文件表项,但是共享一个v节点表项。
1.假定进程A调用lseek,对于进程A的该文件的当前位置量设置为1500L,
2.然后内核切换进程使B进程运行。进程B执行lseek,也将该文件的当前位移量设置为1500L,
3.然后B调用write,它将B的该文件的当前位置量增至1600
4.因为文件的长度已经增加,所以内核对v节点中的当前长度更新为1600
5.然后内核又切换使