#c #fflush
#c #fflush
Вопрос:
мой код :
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
system("pwd");
}
Вывод:
[river@localhost studio]$ ./a.out
/home/river/Desktop/studio
./a.out[river@localhost studio]$
Кажется, что system («pwd») сначала печатает, затем печатает argv[0] . почему?
Если я добавлю оператор, подобный следующему :
#include <stdio.h>
void main( int argc, char** argv) {
printf("%s", argv[0]);
fflush(stdout);
system("pwd");
}
Вывод :
[river@localhost studio]$ ./a.out
./a.out/home/river/Desktop/studio
Это работает нормально, почему?
Ответ №1:
printf
Вызов помещает выходные данные только в буфер. Чтобы буфер действительно был записан, его необходимо очистить. Вывод автоматически сбрасывается при печати новой строки, поэтому, если вы замените строку формата в printf
на this: "%sn"
она должна работать без вызова to fflush
.
Комментарии:
1. … и вызов «system» не очищает выходной поток и даже не использует выходной поток — команда, вызываемая «system», записывается непосредственно и немедленно на консоль, затем буфер очищается, когда программа завершается, и отображается строка, которую вы напечатали.
Ответ №2:
Другой способ «исправить» это:
printf("%sn", argv[0]);
Дело в том, что стандартный вывод по умолчанию имеет линейный буфер.
См.:
- setbuf(), setvbuf()
- stdbuf