相关疑难解决方法(0)

为什么stdout在重定向到文件时需要显式刷新?

行为printf()似乎取决于的位置stdout.

  1. 如果stdout发送到控制台,则printf()行缓冲并在打印换行符后刷新.
  2. 如果stdout被重定向到文件,则除非fflush()被调用,否则不刷新缓冲区.
  3. 此外,如果printf()stdout重定向到文件之前使用,则后续写入(对文件)是行缓冲的并在换行后刷新.

何时进行stdout行缓冲,什么时候fflush()需要调用?

最简单的例子:

void RedirectStdout2File(const char* log_path) {
    int fd = open(log_path, O_RDWR|O_APPEND|O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO);
    dup2(fd,STDOUT_FILENO);
    if (fd != STDOUT_FILENO) close(fd);
}

int main_1(int argc, char* argv[]) {
    /* Case 1: stdout is line-buffered when run from console */
    printf("No redirect; printed immediately\n");
    sleep(10);
}

int main_2a(int argc, char* argv[]) {
    /* Case 2a: stdout is not line-buffered when …
Run Code Online (Sandbox Code Playgroud)

c linux stdout

28
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

linux ×1

stdout ×1