clock_gettime的使用不允许输出重定向到文件

时间:2016-09-22 12:32:57

标签: c file terminal stdout stderr

以下程序为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似乎触发此缓冲区。如果没有重定向工作正常。

0 个答案:

没有答案