以下程序为i
增加变量100ms
并打印该值。问题是,当从终端重定向输出时,它不会将任何内容打印到文件中。
#include <stdio.h>
#include <time.h>
struct timespec start={0,0}, end={0,0};
int main(void) {
double diff;
while(1) {
unsigned long i = 0;
clock_gettime(CLOCK_MONOTONIC, &start);
do {
++i;
clock_gettime(CLOCK_MONOTONIC, &end);
diff = (((double)end.tv_sec + 1.0e-9*end.tv_nsec) - ((double)start.tv_sec + 1.0e-9*start.tv_nsec));
} while(diff < 0.1);
printf("i = %lu\n", i);
}
return 0;
}
我使用gcc counter.c -o counter
进行编译,当我运行./counter
时,i
的值会被打印到屏幕上,但当我./counter > file.out
时,没有任何内容文件。我也尝试重定向stderr 2>
和./counter > file.out 2>&1
。但是,如果我删除clock_gettime
函数,它似乎工作正常。知道为什么会这样,以及如何绕过它?
更新:
我的问题更多是关于如何立即打印到屏幕(stdout
),但重定向时它不是立即?仅使用clock_gettime
似乎触发此缓冲区。如果没有重定向工作正常。