2

У меня есть программа, выполняющая бесконечный цикл, и она не прекратится до получения сигнала CTRL+C Я хочу перенаправить вывод этой программы в файл, например, в log . Однако после того, как я CTRL+C программа ничего не записывает в log . Я думаю, что это может быть какая-то проблема, связанная с буфером ввода / вывода, но не знаю, как ее решить. Я на правильном пути? Как вывести вывод из программы с бесконечным циклом в файл?

2 ответа2

6

Если ваша программа использует стандартные функции вывода (например, puts printf и друг из stdio.h в C, cout << … в C++, print на многих языках высокого уровня), то его выход буферный: символы накапливаются в памяти зона, которая называется буфером; когда в буфере слишком много данных, содержимое буфера печатается (оно «сбрасывается») и буфер становится пустым (готовым для повторного заполнения). Если ваша программа не выдает много информации, возможно, она еще не заполнила свой буфер.

Когда вы убиваете свою программу с помощью Ctrl+C, если вы не установили обработчик сигнала для SIGINT, она просто умирает. Содержимое любого очищенного буфера теряется.

У вас есть три возможности:

1

Скрипт (с бесконечным циклом или без него) должен постепенно сохранять перенаправленные данные, поэтому природа скрипта не должна влиять на результат. Данные должны быть записаны постепенно ...

Или (если вообще нет вывода, даже без перенаправления), вы можете попробовать fflush(stdout) или что-то на этот счет.

Просто мысль (хотя и крайне маловероятная) ... вы уверены, что перенаправление STDOUT - это то, что вы должны сделать? Разве это не случайно STDERR? Попробуйте запустить бинарный файл / скрипт / ... с:

$ ./program 2> ./stderr_out

а затем cat ./stderr_out чтобы убедиться, что STDERR не тот ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .