多个用户对一个文件操作
来源:互联网 发布:php开源做账系统 编辑:程序博客网 时间:2024/06/05 14:15
转载自他人博客
如果多个用户对一个文件进行操作的时候,如何解决,考虑用文件锁的形式和多路复用形式
Linux下多个进程或线程同时对一个文件进行写操作,使用flock(锁定文件或解除锁定),可以解决冲突。
头文件
#include<sys/file.h>
定义函数
int flock(int fd,int operation);
函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文件的某一区域。
参数
operation有下列四种情况:
LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。
LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。
LOCK_UN 解除文件锁定状态。
LOCK_NB无法建立锁定时,此操作可不被阻断,马上返回进程。通常与LOCK_SH或LOCK_EX 做OR(|)组合。 单一文件无法同时建立共享锁定和互斥锁定,而当使用dup()或fork()时文件描述词不会继承此种锁定。
返回值 返回0表示成功,若有错误则返回-1,错误代码存于errno。
程序如下:
#include <sys/file.h> //flock header file#include <unistd.h> //ftruncate header fileint main(int argc, char *argv[]){FILE *fin;Buf[100] = {“hello world”}; fin = fopen(argv[1], "rt+"); if (!fin) { Printf( "Fail to open the file: \n" )l; return; } //建立排他锁,阻塞方式 if ( (flock(fileno(fin), LOCK_EX)) < 0 ) { Printf("Fail to lock the file: \n"); return; } ftruncate(fileno(fin), 0); //清空文件 //写文件 fwrite(buf,sizeof(buf),1,fin); //解除锁 if ( (flock(fileno(fin), LOCK_UN)) < 0 ) { printf("Fail to unlock the file: "); return; }fclose(fin);}
0 0
- 多个用户对一个文件操作
- 文件锁以及多路复用方式解决多个用户对一个文件的操作
- linux 多个用户对一个文件进行操作 文件锁和多路复用
- 文件锁以及多路复用方式解决多个用户对一个文件的操作
- 关于多个用户对一个文件进行操作的时候
- 对一个文件多个读写
- linux多个用户对于文件的操作
- 用map对一个或者多个list元素操作
- 多个客户端操作甘特图时,如何做才能实现不允许对一个控件并发操作
- 同时对多个文件进行大量写操作对性能优化
- 同时对多个文件进行大量写操作对性能优化
- 文件操作:洗牌/统计文本文件单词/复制mp3文件/多个文件合并成一个文件
- 线程的加锁和解锁,防止多个用户操作一个方法
- iOS 多个线程对数组操作(遍历,插入,删除),实现一个线程安全的NSMutabeArray
- chmod----改变一个或多个文件 的用户组 当前用户 其他用户的读写执行权限
- 多个ISO文件怎样合并为一个ISO文件(Linux下的操作)
- Java 如何对文件进行多个Object对象流的读写操作
- 多线程实现对同一个或多个文件的读写操作
- CSS :hover伪类选择定义和用法
- springboot集成activemq,超赞!!!
- iOS中关于适配的那些事(本篇首要了解autoresizing、autoLayout、VFL;下篇了解第三方适配)
- 八皇后问题
- C++11时代的标准库快餐教程(3) - 排序
- 多个用户对一个文件操作
- 哪些集合对象线程是安全的,哪些是不安全的。
- Collection集合大家族
- 使用原子主机、Ansible 和 Cockpit 部署容器
- 下载图片
- STL笔记(2)-vector,迭代器具体用法介绍
- Vue结合原生js实现自定义组件自动生成
- 判断回文结构 python
- 第八章