首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >两个不同的C程序正在访问一个文件

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

Stack Overflow用户
提问于 2013-07-04 13:13:38
回答 3查看 122关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 2013-07-04 13:20:04

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

顺便说一句,文件是按顺序读写的吗?你有没有考虑过使用一些更高级的东西,例如GDBM或者像mariadbpostgresqlmongodb这样的数据库,等等……

票数 2
EN

Stack Overflow用户

发布于 2013-07-04 14:21:56

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

否则,在我自己的测试程序中,似乎不需要锁定来让生产者和消费者对同一文件进行操作。这只是轶事证据,我不能保证。

制片人:

代码语言:javascript
运行
复制
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);
}

消费者:

代码语言:javascript
运行
复制
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

这个程序假设"file“已经存在。

票数 0
EN

Stack Overflow用户

发布于 2013-07-04 15:17:10

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17462309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档