您的位置:首页 > 其它

fcntl文件锁

2015-10-08 19:54 330 查看
fcntl的非强制文件锁(锁定后仍可读写),通过F_GETLK判断是否锁定,再决定是否加锁

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

extern int errno;

int main(){

pid_t pid1;

struct flock flk1;

int fd1;

ssize_t nread;

char var[]="abcdef";

char var2[10]={0};

if(( fd1 = open("tem1",O_RDWR|O_CREAT|O_TRUNC|O_SYNC,00666))==-1){

printf("open file err!");

exit(-1);

}

flk1.l_type=F_WRLCK;

flk1.l_whence=SEEK_SET;

flk1.l_start=0;

flk1.l_len=100;

if(fcntl(fd1,F_SETLK,&flk1)==-1){

printf("fcntl lock err !");

exit(-1);

}

printf("lock pid is %d\n",flk1.l_pid);

write(fd1,var,sizeof(var));

// FILE *fp =

// fflush();

lseek(fd1,0,SEEK_SET);

if((nread = read(fd1,var2,10))==-1){

printf("read err ! %d\n",errno);

exit(-1);

}

printf("%s\n",var2);

if((pid1=fork())<0){

printf("fork err !");

exit(-1);

}

if(pid1==0){

char var1[10]="zxz";

char var3[30];

memset(var3,0,30);

fcntl(fd1,F_GETLK,&flk1);

printf("%d\n",flk1.l_type);

lseek(fd1,0,SEEK_SET);

write(fd1,var1,10);

lseek(fd1,0,SEEK_SET);

read(fd1,var3,30);

printf("%s\n",var3);

return 0;

}

wait();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: