两个不同的C程序正在访问文件

时间:2013-07-04 05:13:38

标签: c linux file-io

我在Linux平台上有一个应用程序,它需要一个服务器程序来连续地将数据写入bin文件。同时另一个程序需要读取写入的值。如果我在读取和写入过程中没有锁定文件,我应该担心吗?

3 个答案:

答案 0 :(得分:2)

你应该担心。我假设你确定没有其他程序(比你问题中提到的两个可执行文件)访问该文件。您确实应该锁定以序列化该访问。使用flock(2)或使用lockf(3)

fcntl(2) BTW,顺序读取和写入文件?您是否考虑使用某些更高级别的内容,例如GDBM或某些数据库,如mariadbpostgresqlmongodb等...

答案 1 :(得分:0)

一切都取决于您的要求是什么?你能修改服务器进程吗?如果是这样,你就有了无穷无尽的可能性。这是一个研究得很好的问题,即进程间通信,wikipedia IPC

否则,在我自己的测试程序中,似乎没有必要锁定让生产者和消费者在同一个文件上操作。这只是轶事证据,我不做任何保证。

制片:

int main() {
    int fd = open("file", O_WRONLY | O_APPEND);

    const char * str = "str";
    const int str_len = strlen(str);
    int sum = 0;
    while (1) {
        sum += write(fd, str, str_len);
        printf("%d\n", sum);
    }
    close(fd);
}

消费者:

int main() {
    int fd = open("file", O_RDONLY);

    char buf[10];
    const int buf_size = sizeof(buf);
    int sum = 0;
    while (1) {
        sum += read(fd, buf, buf_size); 
        printf("%d\n", sum);
    }
    close(fd);
}

(包括:)     #包括     #包括     #包括     #include

此程序假定“文件”已存在。

答案 2 :(得分:0)

只是添加到此处已经说过的内容,请查看您的操作系统文档。原则上读取时应该没有问题,如果读取是原子的(即操作期间没有任务切换),应该没问题。操作系统也有自己的限制和锁定,所以要小心。