以下代码:
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#define FILE "out.txt"
int main() {
// Creates an empty file
close(open(FILE, O_WRONLY|O_TRUNC|O_CREAT, 0600));
fork();
close(1);
open(FILE, O_WRONLY);
execlp("date", "date", NULL);
}
创建一个名为 out.txt 的文件,内容如下:
Tue 4 Dec 21:21:54 GMT 2018
我不明白为什么日期和时间只有一行。
我的期望是这两个子进程中的每一个都应该关闭它们各自的标准输出文件描述符,并且现在它们是空闲的,将它们重新分配给 out.txt。所以我希望在文件中看到两行,每个子进程一行。为什么没有发生这种情况?
预先感谢您的帮助。
最佳答案
open(FILE, O_WRONLY);
将偏移量放在文件的开头。两个进程都将当前日期写入文件的开头——其中一个将覆盖另一个,但由于它们都写入相同的字符串,因此无法检测到。
设置O_APPEND
第二open()
将为您带来预期的结果。
(顺便说一句,不要为预处理器宏使用名称 FILE
。它已经定义为 <stdio.h>
中的类型。)
关于c - 从两个子进程写入同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53621973/