繁体   English   中英

从两个子进程写入同一文件

[英]Writing to the same file from two child processes

如下代码:

#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); 将偏移量放在文件的开头。 这两个进程都将当前日期写入文件的开头-其中一个将覆盖另一个日期,但是由于它们都写入相同的字符串,因此无法检测到。

在第二个open()上设置O_APPEND将获得期望的结果。

<stdio.h>一句,不要为预处理器宏使用名称FILE 。它已经在<stdio.h>定义为类型。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM