繁体   English   中英

在C中使用lockf锁定文件不起作用

[英]locking a file using lockf in C is not working

平台 :Ubuntu 14.4

gcc版本 :4.8.2

语言 :C

情况:

我有两个文件来测试lockf的功能,一个是写,另一个是读。

在写入过程中,目标文件应被锁定,从而禁用读取操作以打开同一文件。

问题:

当我运行写程序时,我只是让它等待用户输入并启动读程序。 读取能够以某种方式在目标文件中获取信息。 这意味着写入中的lockf无法正确锁定它。 为什么我失败了?

码:

read.c

int main()
{
    char buffer[4];
    char *filename = "/home/fikrie/Documents/test_lockf/file.txt";
    int fd;

    fd = open(filename, O_RDONLY, 0644);
    lockf(fd, F_LOCK, 3);
    while (1) {
            if (read(fd, buffer, 3) == -1) {
                    printf("Error getting file");
                    break;
            } else {
                    printf("%s",buffer);
                    getchar();
            }
    }
    close(fd);
    lockf(fd, F_ULOCK, 0);

    return 0;
}

为write.c

int main()
{
    char buffer;
    char *filename = "/home/fikrie/Documents/test_lockf/file.txt";
    int fd;

    fd = open(filename, O_WRONLY | O_APPEND, 0644);
    lockf(fd, F_LOCK, 3);
    while(1) {
            buffer = getchar();
            if (buffer != 'q') {
                    write(fd,"ABC",3);
                    write(fd,":",1);
            }
            else {
                    break;
            }
    }
    close(fd);
    lockf(fd, F_ULOCK, 0);

    return 0;
}

等等:

在手册页中

lockf(int fd, int function, off_t size);

size参数是要锁定或解锁的连续字节数。 要锁定或解锁的部分从文件中的当前偏移量开始,向前扩展为正大小,向后扩展为负大小。

我以为我为size参数传递了错误的值,所以我也尝试传递0。 但是结果是一样的。

Lockf命令要求文件描述符可写,以使F_LOCK版本成功。

从手册页:

错误
EBADF fd不是打开的文件描述符; 或cmd是F_LOCK或F_TLOCK,而fd不是可写文件描述符。

PS:@unwind,完全正确,检查错误代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM