Столкнулся с ошибкой при написании консольной утилиты на Raspberry Pi 4 B (ядро ARM7L): printf не выводит текст если сразу после него стоит выход из программы:
//setbuf(stdout, NULL);
//setvbuf(stdout, NULL, _IONBF, 0);
if (NULL == fi)
{
printf ("Error open file %s\r", argv[1]);
//fflush(stdout);
return 1;
}
Если после printf вызвать getc (ожидание ввода символа), то тогда printf выводит текст в этом случае нормально:
printf ("Error open file %s\r", argv[1]);
getc(stdin);
В Интернете нашел несколько советов, связанных с использованием fflush, setbuf и setvbuf [1, 2]. Вызов fflush(stdout) действительно помогает, если это не относится к моменту выхода из программы. Но для случая выхода из программы fflush не помогает.
Оказалось, что если в конце строки поставить символ \n, то проблема сразу решается:
printf ("Error open file %s\n", argv[1]);
return 1;
[Ссылки]
1. Why does printf not flush after the call unless a newline is in the format string? site:stackoverflow.com. 2. c stdout print without new line? site:stackoverflow.com. 3. Секреты printf. 4. stdio.h: стандартные возможности ввода/вывода. |