【linux学习笔记-13】基本进程通信--文件锁

【linux学习笔记-13】基本进程通信--文件锁

ID:11065486

大小:45.00 KB

页数:9页

时间:2018-07-09

【linux学习笔记-13】基本进程通信--文件锁_第1页
【linux学习笔记-13】基本进程通信--文件锁_第2页
【linux学习笔记-13】基本进程通信--文件锁_第3页
【linux学习笔记-13】基本进程通信--文件锁_第4页
【linux学习笔记-13】基本进程通信--文件锁_第5页
资源描述:

《【linux学习笔记-13】基本进程通信--文件锁》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、【linux学习笔记-13】基本进程通信--文件锁(2009-03-1614:06:17)标签:linux进程通信文件锁fcntl()lockf()代码实例it分类:学习公社在Linux系统中,进程运行在自己的虚拟内存空间中,如何协调不同虚拟地址空间中的进程访问一个非共享资源,文件加锁是基本进程通信方法之一。可以使用fcntl()、lockf()、flock()实现文件锁,进而实现进程之间的通信。1.fcntl()【函数介绍】调用形式(执行失败返回-1):intfcntl(intfd,intcmd);intfcntl(intfd,intcm

2、d,longarg);intfcntl(intfd,intcmd,structflock*lock);fcntl()的功能不只是给文件加锁,也可以修改打开文件的性质。对于给文件增加非强制文件锁时,参数lock指向的结构体flock定义如下:structflock{...shortl_type;//锁类型,可以为:F_RDLOCK/F_WRLOCK/F_UNLOCK,F_RDLOCK/F_WRLOCK为获得文件锁读/写权限,F_UNLOCK为释放文件锁shortl_whence;//l_start的起始点,可以为SEEK_SET,SEEK_C

3、UR,SEEK_ENDoff_tl_start;//锁的起始偏移值off_tl_len;//锁定大小pid_tl_pid;....};该函数返回errno,如果为EAGAIN或者EACCES,表示其他进程已经拥有该文件的锁,本次操作被禁止。其他值的含义略去。【实例】#include#include#include#includeintmain(intargc,char*argv[]){intfd;structflocklock;intcount=0;if(argc!=

4、2){printf("Usage:%sfilename.",argv[1]);return1;}fd=open(argv[1],O_RDWR);if(fd<0){printf("Openfilefailed.");return1;}lock.l_type=F_WRLCK;//设置写锁lock.l_whence=0;//从文件起始位置开始lock.l_start=0;//偏移值为0lock.l_len=0;//整篇加锁while(fcntl(fd,F_SETLK,&lock)<0){if(errno==EAGAIN

5、

6、errno==E

7、ACCES)//被其他进程加锁了{if(++count<5){sleep(1);//加锁申请最多持续5s}else{fcntl(fd,F_GETLK,&lock);//否则放弃之前打印当前文件被那个进程加了锁,F_GETLK为获得加锁信息printf("Pid:%ldprocessfindpid%ldprocesslockthefile%s.",(long)getpid(),(long)lock.l_pid,argv[0]);return1;}}else{printf("Error:execfunctionfcntlfailed."

8、);return1;}}printf("Pid:%ldprocesslockedthefile.",(long)getpid());sleep(8);//占用文件的时间,这里可以是对文件的一些操作printf("Pid:%ldprocessreleasethefile.",(long)getpid());return0;}【执行结果】如果在main函数中进程获得文件锁以后sleep8秒(时间大于另一个进程申请锁的最大时间)://releaseafter8second.gaolu@gaolu-desktop:~$gaolu@gaolu

9、-desktop:~$gaolu@gaolu-desktop:~$gcc-ofilelocksystemcall2.cgaolu@gaolu-desktop:~$gaolu@gaolu-desktop:~$gaolu@gaolu-desktop:~$gaolu@gaolu-desktop:~$./filelocktestlock.dat&./filelocktestlock.dat&./filelocktestlock.dat&Pid:6270processlockedthefile.[1]6270[2]6271[3]6272gaolu@g

10、aolu-desktop:~$Pid:6271processfindpid6270processlockthefile./filelock.Pid:6272processfind

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。