linux系统编程 进程间文件锁

   1 /*
  2 头文件:#include<fcntl.h> #include<unistd.h>
  3 原型:int fcntl(int fildes, int cmd, ...);
  4 int fcntl(int fildes,int cmd,struct flock *flags);
  5 fildes:文件描述符
  6 cmd:
  7 F_SETLK:        设置文件锁(尝试获取,不阻塞)
  8 F_SETLKW:       设置文件锁(阻塞等待)
  9 F_GETLK:        获取文件锁
 10 
 11 sturct flock{   //修改文件锁的属性
 12         short   l_type    文件锁的类型:读锁,写锁,解锁
 13 
 14         short   l_whence  文件光标定位:文件头,文件尾,文件当前光标
 15 
 16         off_t   l_start   文件偏移量
 17 
 18         off_t   l_len     文件上锁的字符长度(设置0时,整个文件都加锁)
 19 
 20         pid_t   l_pid     获取当前锁的进程pid(只有参数2使用F_GETLK)
 21 };
 22 返回值:成功返回0;失败返回错误号
 23 作用:进程间对文件上锁(写时独占,读时共享,写优先级高)
 24 
 25 
 26 eg:
 27 //定义文件锁属性的结构体
 28 struct flock f_lock;
 29 //设置文件锁属性
 30 f_lock.l_type=F_WRLCK;  写锁
 31 f_lock.l_whence=SEEK_SET;       光标定位在文件投
 32 f_lock.start=0;         文件偏移量为0
 33 f_lock.l_len=0;         文件上锁的字符长度为整个文件
 34 f_lock.l_pid;           文件锁的进程pid(一般不设置)
 35 
 36 fcntl(fd,F_SETLKW,&f_lock);     上锁
 37 
 38 f_lock.l_type=F_UNLCK;          解锁
 39 fcntl(fd,F_SETLKW,&f_lock);     
 40 
 41 注意:上锁前需要open打开文件获得fd文件描述符
 42 */

多线程无法使用文件锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值