您的位置:首页 > 其它

文件锁File Locking示例

2013-07-10 22:08 211 查看
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

#define TEST_FILE "00000.txt"

int main(int argc, char *argv[])
{
// if F_WRLCK,then will blocked with both
read and read suspending
// if F_RDLCK,then read will not
blocking,but write will

struct flock fl =
{F_WRLCK, SEEK_SET, 0,
0,
0 };
int fd;

if ((fd =
open(TEST_FILE, O_RDWR)) == -1) {

perror("open");

exit(1);
}
//one for write locking,
another for read locking
pid_t pid =
fork();

if(pid <
0)
return -1;

if(0 == pid){
fl.l_pid =
getpid();
sleep(1);

if (fcntl(fd, F_SETLKW, &fl) == -1) {
perror("C:fcntl");
exit(1);
}

printf("C:locked...\n");

fl.l_type = F_UNLCK;

if (fcntl(fd, F_SETLK, &fl) == -1) {
perror("C:fcntl");
exit(1);
}

printf("C:Unlocked.\n");

}else{

fl.l_type =
F_RDLCK;
fl.l_pid =
getpid();

if (fcntl(fd, F_SETLKW, &fl) == -1) {
perror("F:fcntl");
exit(1);
}

printf("F:locked...\n");
sleep(2);

fl.l_type = F_UNLCK;

if (fcntl(fd, F_SETLK, &fl) == -1) {
perror("F:fcntl");
exit(1);
}

printf("F:Unlocked.\n");
}

close(fd);

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