文件锁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;
}
#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;
}
相关文章推荐
- arm-linux-gcc&nbsp;4.3.3&nbsp;Illegal&nbsp;inst…
- metaweblog&nbsp;sina
- 【原创】python zip 函数
- linux&nbsp;mmap驱动实现
- Python&nbsp;cgi&nbsp;windows
- HTML中      等6种空白空格的区别
- 【转载】 linux-python …
- pthread_create&nbsp;内存泄漏&nbsp;valgrind
- iOS&nbsp;招聘&nbsp;准备资料
- 【原创】mysql 常见导入导出用法
- 深入分析&nbsp;Linux&nbsp;内核链表&nbsp;(转载)
- Xcode&nbsp;调试加入参数《Apple&nbsp;Dev&nbsp;Do…
- poj&nbsp;1426&nbsp;Find&nbsp;The&nbsp;Multiple
- 【原创】 linux-mysql E…
- HDU:2045不容易系列之(3)—— LELE…
- vxWorks&nbsp;BSP主要文件目录的组成及…
- In&nbsp;App&nbsp;Purchase&nbsp;详细介绍
- 今天与明天&nbsp;&nbsp;--信息与计算科…
- nyoj&nbsp;大数加法
- 外连接(outer&nbsp;join)