如何使用fcntl()随机锁定文件中的一些字节?

时间:2017-01-02 18:42:19

标签: c linux unix ipc fcntl

我正在尝试研究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");

    }

0 个答案:

没有答案