Одна вещь, которую вы должны сделать, прежде чем это вообще сработает, - это вызвать fflush(stdout);
перед тем, как вывести из него дескриптор файла stdout
.Вероятно, происходит то, что стандартная библиотека C буферизует ваш вывод, не подозревая, что вы перемещаетесь вокруг файловых дескрипторов под ним.Данные, которые вы записываете с использованием printf()
, на самом деле не отправляются в базовый дескриптор файла, пока его буфер не заполнится (или ваша программа не вернется из main
).
Вставьте вызов какэто:
fflush(stdout);
if(dup2(file, 1) < 0) {
перед обоими вызовами на dup2()
.