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

标签 c linux file-io

以下代码:

#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/

相关文章:

c++ - 在 Debian 上为您自己的应用程序添加 SNMP 支持的最佳方式

java - 使用 Java 在 Linux 上查找给定文件的根目录

c++ - 时区问题 : `$ date -R` says `+0300` , 但 `timezone` 表示 `-7200`

c - Linux 系统调用和 errno

c - 即使使用 -l 也找不到静态库符号

file-io - Xilinx Zynq ZCU102 中 SD 卡的 Filo I/O 操作

java - 读取文本文件时检查不可打印字符的行

c - 如何解决打开文件堆错误

使用 python 循环的每次迭代创建一个文本文件

c - 在以下脚本中使用 IN 和 OUT 状态需要什么?