我正在尝试研究fnctl记录锁定。我创建了两个文件file1.c和file2.c。两个文件都将字符串写入"数据"文件。我使用fnctl为整个文件创建了一个锁。当我从两个终端运行两个程序时 (cc file1.c -o file1)(cc file2.c -o file2) 首先是来自终端1的./file1,然后是来自终端2的./file2,首先是file1程序写入" abcdefghijklmnop"由于锁定,数据文件和file2程序等待。在解锁file1的锁定之后,file2写入" ABCDEFGHIJKLMNOP"到数据文件。有人可以改进我的代码来为某些位设置锁(例如4到9)并且该程序应该通知遇到锁吗?
file1.c中
void main()
{
struct flock v;
int fd,i;
char s[]="abcdefghijklmnop";
// char s[]="ABCDEFGHIJKLMNOP"; in file2.c
fd = open("data",O_RDWR|O_CREAT|O_APPEND,0644);
v.l_type = F_WRLCK;
v.l_whence = SEEK_SET;
v.l_start = 0;
v.l_len = 0;
printf("Before...\n");
fcntl(fd,F_SETLKW,&v);
printf("After....\n");
for(i=0;s[i];i++)
{
write(fd,&s[i],1);
sleep(1);
}
v.l_type = F_UNLCK;
fcntl(fd,F_SETLK,&v);
printf("Done...\n");
}