У меня есть программа, которая должна выводить на stdout
, а информация о состоянии переходного процесса на stderr
.Программы с похожими результатами могут включать в себя rsync или apt (хотя их вывод достаточно сложный, что сводит его к тому, что мне нужно, просто устрашает).
Эта программа кажется такой, как она должна работать, как описано,но не:
#include <stdio.h>
#include <limits.h>
void *work () {
for (long i = 0; i < LONG_MAX; i++) {
if (i % 100000000 == 0) {
fprintf(stdout, "%ld\n", i);
}
fprintf(stderr, "\rrunning %ld", i);
}
return 0;
}
int main() {
work(0);
fprintf(stderr, "\ndone\n");
return 0;
}
Информация о состоянии обновляется на месте с помощью stderr
по желанию, но через stdout
отображается только одна строка вывода.Если статус stderr
fprintf
будет удален, тогда все выходные данные stdout
будут отображаться, как и ожидалось.
Что здесь происходит?