Я пытаюсь скомпилировать порт 1991 C оригинального Crowther/Woods FORTRAN Колоссальное пещерное приключение. Код - ужасный беспорядок, но после изменения некоторых его разделов он компилируется и работает правильно.C программа отказывается трубить?
Проблема в том, что когда я пытаюсь передать ее вывод в другую программу или в файл, ничего не появляется. ./adventure
хорошо работает, но ./adventure | cat
ничего не печатает. Grepping для вызова fstat
ничего не получается.
Есть ли другой способ, которым программа может обнаруживать трубу и переходить в бесшумный режим? Даже добавление printf("Hello World");
в качестве первой строки основной функции не вызывает ничего, что может появиться через cat.
EDIT: Я использую версию Джима Гиллогли, но ссылка, с которой я получил источник, потухла. Я найду еще одну ссылку для скачивания.
Возможно, это не «выход в тихий режим». Когда stdout - это tty, по умолчанию это строка буферизирована. Когда это канал, он блокируется блоком. Ваши данные, вероятно, просто сидят в буфере. –
Чтобы увидеть это поведение в более простой программе, напишите приветственную программу мира, которая печатает «hello world \ n», а затем переходит в режим сна в течение 10 секунд. Обратите внимание на разницу в поведении, когда эта программа записывает в терминальные стихи, записывающие в трубу. (Убедитесь, что вы печатаете новую строку.) –