Откуда вы знаете, что foo()
печатает на stdout
? Вы пытались перенаправить стандартный вывод в файл оболочки и посмотреть, появляется ли на экране вывод из foo()
?
Если перенаправление файла отправляет вывод foo()
в файл, то вам, возможно, придется перенастроить уровень дескриптора файла, как в cnicutar .
Если перенаправление файла не отправляет вывод foo()
в файл, то это может быть запись в stderr
или открытие или использование /dev/tty
или что-то подобное. Вы можете проверить на stderr
, перенаправив его отдельно от stdout
:
your_program >/tmp/stdout.me 2>/tmp/stderr.me
Если он открывается /dev/tty
, вывод все равно будет отображаться на вашем экране.
На какой ты платформе? Если вы можете отслеживать системные вызовы (strace
в Linux, truss
в Solaris, ...), то вы сможете увидеть, что делает функция foo()
. Вы можете помочь, написав сообщение до и после вызова функции и убедившись, что вы сбросили вывод:
printf("About to call foo()\n");
fflush(0);
foo();
printf("Returned from foo()\n");
fflush(0);
Вызовы printf / fflush будут видны в выводе трассировки, поэтому все, что появляется между ними, выполняется с помощью foo()
.