0

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

4

3 回答 3

2

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

顺便说一句,文件是按顺序读取和写入的吗?您是否考虑过使用一些更高级别的东西,例如GDBM或一些数据库,如mariadbpostgresqlmongodb等...

于 2013-07-04T05:20:03.653 回答
0

一切都取决于您的要求是什么?可以修改服务器进程吗?如果是这样,您将拥有无限可能。这是一个经过充分研究的问题,进程间通信,维基百科 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 #include #include #include

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

于 2013-07-04T06:21:56.290 回答
0

只是为了补充这里已经说过的内容,请检查您的操作系统文档。读取时原则上应该没有问题,如果读取是原子的(即运行过程中没有任务切换),应该是可以的。操作系统也可能有自己的限制和锁定,所以要小心。

于 2013-07-04T07:17:09.923 回答