Допустим, у меня есть следующий код:
close(1);
int fd = open("temp.txt", O_WRONLY | O_CREAT);
if (fork() == 0)
printf("Message from A\n");
printf("Message from B\n");
Я знаю, что stdout
является линейным буфером, и я заметил, что, по крайней мере в моей системе, это работает так, как можно было ожидать.
т.е.
Содержимое temp.txt :
Message from B
Message from A
Message from B
Однако, как POSIX определяет поведение для приведенного выше кода? Сохраняется ли буферизация строки для файлового дескриптора 1 (даже после close()
)? Это неопределенно? Что-то другое? Я предполагаю, что команда open()
всегда будет использовать дескриптор файла 1 для temp.txt в приведенном выше коде.
Кроме того, возможно ли, скажем, только часть "Message from A\n"
или "Message from B\n"
для записи в буфер, связанный с дескриптором файла 1, перед тем как процессор загрузит другой процесс и перезапишет только что записанное частичное сообщение?
например
Возможно ли эточто родительскому родительскому процессу удается только записать «Message» в буфер до того, как дочерний процесс прервет его, что приведет к следующему содержимому в temp.txt (или что-то подобное):
Message from A
from B
Message from B
ПРИМЕЧАНИЕ:
Код выше - это то, что было дано мне в задании, которое я имею для одного из моих классов. Я понимаю, что лучше открыть файл и затем вызвать dup2()
, а не закрывать дескриптор файла 1, а затем открывать файл.