找回密码
 注册
关于网站域名变更的通知
查看: 313|回复: 1
打印 上一主题 下一主题

Linux系统I/O编程(二) ---- 文件锁函数(下)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-8-12 13:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
文件记录锁的功能代码具体如下:
' p( @, P( m) h! J+ f' H3 ?8 N# ~/ g# r% T2 M

, n- o' P2 l  i  g- A! ^3 Q
  • /*lock_set.c*/
  • int lock_set(int fd,int type)
  • {
  • struct flock old_lock,lock;  /*定义flock结构体*/
  • lock.l_whence=SEEK_SET;  /*加锁整个文件*/
  • lock.l_start=0;
  • lock.l_len=0;
  • lock.l_type=type;
  • lock.l_pid=-1;
  • /*判断文件是否可以上锁 */
  • fcntl(fd,F_GETLK,&lock);
  • if(lock.l_type!=F_UNLCK)
  • {
  •   /*判断文件不能上锁的原因 */
  •   if(lock.l_type==F_RDLCK) /*该文件已经有读取锁 */
  •   {
  •     printf("Read lock already set by %d\n",lock.l_pid);
  •   }
  •   else if(lock.l_type==F_WRLCK) /*该文件已经有写入锁 */
  •   {
  •     printf("Write lock already set by %d\n",lock.l_pid);
  •   }
  • }
  • /*l_type 可能在执行完上述判断后被修改了*/
  • lock.l_type=type;
  • /*根据不同的type值进行阻塞式上锁或解锁*/
  • if((fcntl(fd,F_SETLKW,&lock))<0)
  • {
  •   printf("Lock failed:type=%d\n",lock.l_type);
  •   return 1;
  • }
  • switch(lock.l_type)
  • {
  •   case F_RDLCK:
  •   {
  •    printf("Read lock set by %d\n",getpid());/*getpid()用来得到当前的进程号*/
  •   }
  •   break;
  •   case F_WRLCK:
  •   {
  •    printf("Write lock set by %d\n",getpid());
  •   }
  •   break;
  •   case F_UNLCK:
  •   {
  •    printf("Release lock set by %d\n",getpid());
  •    return 1;
  •   }
  •   break;
  •   default:break;
  • }  /*end of switch*/
  • return 0;
  • }
      v4 _" D3 J. @2 w5 M  v7 N

' ^) c5 T8 s2 i. w1 f% F
* p' c7 }4 H; X5 x9 P5 H7 V4 `

6 s* O9 L% H8 d, _$ W    下面的代码是文件写入锁的测试用例,这里首先创建一个hello.c文件,然后对其上锁,最后释放写入锁。代码如下所示:- O3 G3 V2 Z7 e: _
& ^% E3 a! i1 M3 g# l
游客,如果您要查看本帖隐藏内容请回复
4 S$ o3 x2 ?& z% g+ J
3 B" k, t! ?5 A

- g! a4 \5 }$ D5 ]

该用户从未签到

2#
发表于 2019-8-12 17:41 | 只看该作者
学习一下,谢谢分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:03 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表