快速业务通道

linux文件锁详解(设计文件很底层的操作)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-28

(3)申请写锁

void GetWriteLock(int fd,int start,int len);

  1. 1. /*---阻塞申请共享写锁源码---lockl.c*/
  2. 2. void GetReadLock(int fd,int start,int len)
  3. 3. {
  4. 4. struct flock arg;
  5. 5. arg.l_type=F_WRLCK;
  6. 6. arg.l_whence=SEEK_SET;
  7. 7. arg.l_start=start;
  8. 8. arg.l_len=len;
  9. 9. if(fcntl(fd,F_SETLKW,&arg)==-1)
  10. 10. fprintf(stderr,"[%d] Set Write Lock failed./n",getpid());
  11. 11. else
  12. 12. fprintf(stderr,"[%d] Set Write Lock From %d To %d",getpid(),start,len);
  13. 13. }

(4)释放锁

设计文件锁释放函数ReleaseLock,原型为:

void ReleaseLock(int fd,int start,int len);

  1. 1. /*---释放锁源码---lockl.c*/
  2. 2. void GetReadLock(int fd,int start,int len)
  3. 3. {
  4. 4. struct flock arg;
  5. 5. arg.l_type=F_UNLCK;
  6. 6. arg.l_whence=SEEK_SET;
  7. 7. arg.l_start=start;
  8. 8. arg.l_len=len;
  9. 9. if(fcntl(fd,F_SETLKW,&arg)==-1)
  10. 10. fprintf(stderr,"[%d] UnLock failed./n",getpid());
  11. 11. else
  12. 12. fprintf(stderr,"[%d] UnLock From %d To %d",getpid(),start,len);
  13. 13. }

以下是一个文件锁控制进程的实例,如下:

  1. 1. #include<stdio.h>
  2. 2. #include<fcntl.h>
  3. 3. void main()
  4. 4. {
  5. 5. int fd;
  6. 6. struct flock arg;
  7. 7. if((fd=open("/tmp/tlockl",O_RDWR|O_CREAT,0755))<0)
  8. 8. {
  9. 9. fprintf(stderr,"open file failed./n");
  10. 10. retrun;
  11. 11. }
  12. 12. SeeLock(fd,0,10);
  13. 13. GetReadLock(fd,0,10);/*申请读锁*/
  14. 14. SeeLock(fd,11,20);
  15. 15. GetWriteLock(fd,11,20);/*申请写锁*/
  16. 16. sleep(30);
  17. 17. ReleaseLock(fd,0,10);
  18. 18. ReleaseLock(fd,11,20);
  19. 19. }

本文出自 “pstary” 博客,请务必保留此出处http://pstary.blog.51cto.com/1466168/662698

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号