Запись в один и тот же файл из двух дочерних процессов - PullRequest
0 голосов
/ 05 декабря 2018

Следующий код:

#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.Поэтому я ожидаю увидеть две строки в файле, по одной от каждого дочернего процесса.Почему этого не происходит?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 05 декабря 2018

open(FILE, O_WRONLY); помещает смещение в начало файла.Оба процесса записывают текущую дату в начало файла - один из них записывает поверх другого, но поскольку они оба пишут одну и ту же строку, ее невозможно обнаружить.

Установка O_APPEND всекунда open() даст вам ожидаемые результаты.

(Кроме того, не используйте имя FILE для макроса препроцессора. Он уже определен как тип в <stdio.h>.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...