Linux 多进程读写文件 文件锁
2015-07-07 14:30
776 查看
目前遇到一个问题:多个进程对同一个文件进行写操作,如何避免冲突。研究了一下,做个小结。
对于多进程写文件,主要有以下两种处理方式:
1.类似于Linux日志文件服务
启动一个logger进程,其他进程向logger发消息,即把数据发送给logger,由logger来写文件,这种方法最安全,但是实现上相对复杂
2.采用文件锁
对当前读写文件进行加锁处理,简单说下两种加锁方式:
flock():文件级别的锁,针对整个文件进行加锁
fcntl()函数:段级别的锁,能够针对文件的某个部分进行加锁
另外,对于读写相对不很频繁,每次写入数据量比较小的这种情况,不加锁也可以接受,但打开文件操作时,必须启用O_APPEND选项,以免造成多个进程相互覆盖写入的情况。
在O_APPEND模式下,文件写入操作是这样的一个原子操作:将位置指针移动至文件末尾,写入数据。
对于多进程写文件,主要有以下两种处理方式:
1.类似于Linux日志文件服务
启动一个logger进程,其他进程向logger发消息,即把数据发送给logger,由logger来写文件,这种方法最安全,但是实现上相对复杂
2.采用文件锁
对当前读写文件进行加锁处理,简单说下两种加锁方式:
flock():文件级别的锁,针对整个文件进行加锁
fcntl()函数:段级别的锁,能够针对文件的某个部分进行加锁
另外,对于读写相对不很频繁,每次写入数据量比较小的这种情况,不加锁也可以接受,但打开文件操作时,必须启用O_APPEND选项,以免造成多个进程相互覆盖写入的情况。
在O_APPEND模式下,文件写入操作是这样的一个原子操作:将位置指针移动至文件末尾,写入数据。
相关文章推荐
- 关于linux目录的读权限和执行权限(整理)
- CentOS下tar解压 gz解压 bz2等各种解压文件使用方法
- Linux下libevent安装与示例
- route命令
- Galera 10.0.20 on CentOS 6.6
- linux下mysql的数据库备份文件*.sql从高版本mysql恢复到低版本mysql
- Linux Zmodem传输数据
- linux命令useradd添加用户详解
- window 链接linux mysql 提示错误
- Linux系统下修改环境变量PATH路径
- tar命令
- centos挂载移动硬盘的方法
- Linux目录结构及文件基本操作
- Linux语言环境设置
- centos6.5下源码安装mysql密码修改
- centos普通用户设置sudo权限
- SecureCRT连接Linux主机时,如何更改连接方式为xterm
- Linux Gparted创建NTFS分区,安装Windows系统时不识别的解决方案
- Linux系统下用户行为审计
- LINUX下warning: cast from pointer to integer of different size问题