//lock1.c
/*
程序首先创建一个文件,并且以可读的方式打开,然后在文件中添加一些内容,接着
在文件中设置两个区域,第一个区域为10-30字节,使用共享锁;第二个区域为40-50
字节,使用独占锁,然后程序调用fcntl函数来锁定这两个区域,并在关闭文件和退出程序前等待一分钟
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
const char *test_file = "/tmp/test_lock";
int main()
{
int file_desc;
int byte_count;
char *byte_to_write = "A";
struct flock region_1;
struct flock region_2;
int res;
file_desc = open(test_file,O_RDWR | O_CREAT,0666);
if(!file_desc)
{
fprintf(stderr,"Unable to open %s for read/write\n",test_file);
exit(EXIT_FAILURE);
}
for(byte_count = 0;byte_count < 100;byte_count++)
{
write(file_desc,byte_to_write,1);
}
/*将文件10-30字节设为区域1,并在其上设置共享锁*/
region_1.l_type = F_RDLCK;
region_1.l_whence = SEEK_SET;
region_1.l_start = 10;
region_1.l_len = 20;
/*将文件40-50字节设为区域2,并在其上设置独占锁*/
region_2.l_type = F_WRLCK;
region_2.l_whence = SEEK_SET;
region_2.l_start = 40;
region_2.l_len = 10;
printf("Process %d locking file\n",getpid());
res = fcntl(file_desc,F_SETLK,ion_1);
if(res == -1)
{
fprintf(stderr,"Failed to lock region 1\n");
}
res = fcntl(file_desc,F_SETLK,ion_2);
if(res == -1)
{
fprintf(stderr,"Failed to lock region 2\n");
}
sleep(60);
printf("Process %d closing file\n",getpid());
close(file_desc);
exit(EXIT_SUCCESS);
return 0;
}
//lock1.c
/*
程序首先创建一个文件,并且以可读的方式打开,然后在文件中添加一些内容