Отдельные символы не печатаются на терминале - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть 3 различных процесса, которые все печатают отдельные символы, используя printf.Но я не вижу их в терминале.Когда я добавляю новую строку, printf("\n H"), чтобы каждый символ находился на новой строке, я вижу их.Почему не работает без символа новой строки?

Ответы [ 3 ]

5 голосов
/ 26 сентября 2011

Это вопрос промывки. Если вы очищаете буферы после каждого printf, вы должны получить результат ближе к тому, что хотите. Чтобы очистить стандартный вывод, просто выполните fflush( stdout ).

3 голосов
/ 27 сентября 2011

Стандарт C определяет 3 типа буферизации для выходных потоков:

  • Небуферизованный → буферизация не выполнена
  • Строковый буфер → буфер до появления новой строки
  • Полностью буферизованный → буфер до размера буфера

Тип буферизации выходного потока можно изменить с помощью функций setvbuf(3) и setbuf(3).

Стандарт C требует, чтобы stderr не был полностью буферизован при запуске (он обычно не буферизуется во многих реализациях, чтобы увидеть ошибки как можно скорее); и stdout быть полностью буферизованным, только если можно определить, что он не ссылается на терминал (когда он ссылается на терминал, многие реализации инициализируют его как буферизованный строкой, что вы и видите).

0 голосов
/ 27 сентября 2011

use'write (1, & c, 1) 'системный вызов или

fprintf(stderr,'%c', c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...