Linux 多进程读写文件 文件锁

时间:2021-09-08 14:44:48

目前遇到一个问题:多个进程对同一个文件进行写操作,如何避免冲突。研究了一下,做个小结。

 

对于多进程写文件,主要有以下两种处理方式:

1.类似于Linux日志文件服务

启动一个logger进程,其他进程向logger发消息,即把数据发送给logger,由logger来写文件,这种方法最安全,但是实现上相对复杂

2.采用文件锁

对当前读写文件进行加锁处理,简单说下两种加锁方式:

flock():文件级别的锁,针对整个文件进行加锁

fcntl()函数:段级别的锁,能够针对文件的某个部分进行加锁

 

另外,对于读写相对不很频繁,每次写入数据量比较小的这种情况,不加锁也可以接受,但打开文件操作时,必须启用O_APPEND选项,以免造成多个进程相互覆盖写入的情况。

在O_APPEND模式下,文件写入操作是这样的一个原子操作:将位置指针移动至文件末尾,写入数据。