c - 如何在 C 中使用 fork 写入和读取文件

标签 c linux file fork flock

<分区>

我想知道我们如何在用 C 编写的多进程程序中写入和读取?我尝试使用 flock 和文件描述符,但没有用。有人可以帮助我吗?谢谢。

            int f;        
            f = open("test.txt",O_RDWR | O_CREAT | O_SYNC | O_APPEND);
            int lock = flock(f, LOCK_SH);
            write(f, "asdfg", sizeof("asdfg"));
            int release = flock(f, LOCK_UN);
            close(f);

最佳答案

flock不一定会阻止你的进程写入文件,它只是一个在不同进程和线程之间进行协调的工具。如文档中所示:

flock() places advisory locks only; given suitable permissions on a file a process is free to ignore the use of flock() and perform I/O on the file.

您在这里使用共享锁 (LOCK_SH),这意味着不止一个线程可以使用它。如果您希望一个线程等待另一个线程完成,听起来您需要一个独占锁。

如果你想独占写权限,你应该使用LOCK_EX。您还应该密切注意返回值,因为忽略它会导致各种麻烦。假设某件事成功了,然后继续进行,会招来很多难以修复的错误。

关于c - 如何在 C 中使用 fork 写入和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55319034/

相关文章:

c - 声明字符数组时是否需要提供空字符?

java - Java 中使用 javax.xml 的错误文件描述符 IOException

php - 如何设置html文件夹的权限

java - 当我尝试写入文件时,为什么 Eclipse IDE 会给出终止错误?

c - 从文件中读取行,仅打印与用户选择的字母数量相同的行

c - 在c中读取一个char数组的程序

c++ - typedef函数指针递归

c - free()失败

linux - 复制名称遵循某种模式的文件

javascript - Node.js 生成的 csv 文件显示英镑符号 (£)