当多个进程读取和更新同一个文件时,可能出现同步的问题,这时可以采用进程间同步的技术来实现,例如 信号量等,但是通常 文件锁 会更好一些,因为内核能够自动将文件和锁关联起来。
具体的实现方式有两类:
flock()
对整个文件加锁,它源自于 BSD系统fcntl()
对一个文件区域加锁,源自于 System V总体的使用流程如下:
更进一步,文件加锁也可以作为一项更通用的同步技术来使用。即,约定一个进程对整个文件或一个文件区域进行加锁表示对一些共享资源(如一个共享内存区域)而非文件本身的访问。
<aside>
💡 stdio
库会在用户空间进行缓冲,因此混合使用时需要注意刷新缓冲区等问题。
</aside>
避免的一些方法: