flock
2013-09-25 00:58
302 查看
//flock文件上锁,是能够让多个进程安全,合理并按预料同时访问同一文件的方法。
//GNU/Linux====p175
#include<unistd.h>
#include<sys/file.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
void setlock(int fd,int type){
struct flock lock;
char msg[80];
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 1;
while(1){
lock.l_type = type;
if((fcntl(fd,F_SETLK,&lock))==0)
return;
fcntl(fd,F_GETLK,&lock);
if(lock.l_type != F_UNLCK){
switch(lock.l_type){
case(F_RDLCK):
sprintf(msg,"read lock already set by %d\n",lock.l_pid);
break;
case(F_WRLCK):
sprintf(msg,"write lock already set by %d\n",lock.l_pid);
break;
}
puts(msg);
getchar();
}
}
}
int main(int argc,char *argv[]){
int fd;
if((fd=open(argv[1],O_RDWR|O_CREAT,0666))<0){
perror("open ");
exit(-1);
}
setlock(fd,F_RDLCK);
printf("PID %d read %s\n",getpid(),argv[1]);
getchar();
setlock(fd,F_UNLCK);
printf("PID %d unlocked %s\n",getpid(),argv[1]);
getchar();
setlock(fd,F_WRLCK);
printf("PID %d write %s\n",getpid(),argv[1]);
getchar();
close(fd);
exit(0);
}
//GNU/Linux====p175
#include<unistd.h>
#include<sys/file.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
void setlock(int fd,int type){
struct flock lock;
char msg[80];
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 1;
while(1){
lock.l_type = type;
if((fcntl(fd,F_SETLK,&lock))==0)
return;
fcntl(fd,F_GETLK,&lock);
if(lock.l_type != F_UNLCK){
switch(lock.l_type){
case(F_RDLCK):
sprintf(msg,"read lock already set by %d\n",lock.l_pid);
break;
case(F_WRLCK):
sprintf(msg,"write lock already set by %d\n",lock.l_pid);
break;
}
puts(msg);
getchar();
}
}
}
int main(int argc,char *argv[]){
int fd;
if((fd=open(argv[1],O_RDWR|O_CREAT,0666))<0){
perror("open ");
exit(-1);
}
setlock(fd,F_RDLCK);
printf("PID %d read %s\n",getpid(),argv[1]);
getchar();
setlock(fd,F_UNLCK);
printf("PID %d unlocked %s\n",getpid(),argv[1]);
getchar();
setlock(fd,F_WRLCK);
printf("PID %d write %s\n",getpid(),argv[1]);
getchar();
close(fd);
exit(0);
}
相关文章推荐
- 算法视频库下载常用网址(转载)
- Android中的JSON详细总结
- property_get/property_set
- zoj Candies 贪心
- 混合高斯背景建模理解(原创)
- 软件工程第一次作业词频统计
- MyEclipse使用经验总结
- IOS 正则表达式匹配文本中URL位置并获取URL所在位置(解决连接中文问题)
- JitterBuffer对POS机的影响
- Cn m 组合数,输出!
- 会话之cookie技术(转)
- linux virtualbox 访问 usb
- 黑马程序员-面向对象
- block_char
- c示例
- JDIC浏览器组件的使用方法
- HttpServletResponse应用(转)
- fstat
- Mahout随机森林算法源码分析(3)--TestForest
- JAVA检测端口的占用情况