Я пишу программу на C для Unix, которая должна перенаправлять вывод в файл и записывать в нее какой-то текст каждую секунду в бесконечном цикле:
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(void) {
int outDes = open("./output.txt", O_APPEND | O_WRONLY);
dup2(outDes, 1);
while(1) {
printf("output text\n");
sleep(1);
}
}
Но она ничего не записывает в выходной файл.Я попытался изменить цикл while для for для 10 циклов и обнаружил, что он записывает все 10 строк в файл сразу после окончания серии.Это не очень хорошо для меня, хотя мне нужен бесконечный цикл.
Когда я не перенаправляю вывод, все нормально, и каждую секунду на терминале появляется новая строка.
Я также пытался поставить один
printf("text\n");
перед перенаправлением вывода в файл.Затем программа записывает строки в файл в режиме реального времени, что хорошо, но записывает туда и первую (не перенаправленную) строку.Мне не нужна эта первая строка в моем выходном файле, я не понимаю, как она могла быть записана в файл, когда вывод еще не был перенаправлен (возможно, перенаправление осталось там с момента последнего запуска?), И как это могло привести к тому, что строкивнезапно пишутся в реальном времени.
Может кто-нибудь объяснить мне, как это работает?