printf有缓存| stderr无缓存导致日志乱序

原因:stdout 和 stderr 的缓冲模式不同

  • stdout(printf)的缓冲行为:
    默认情况下:
    如果输出到 终端(TTY),stdout 是 行缓冲(line-buffered),遇到 \n 会立即刷新。
    如果重定向到 文件(如 >> $logfile 2>&1 & 重定向到文件),stdout 会变为 全缓冲(fully-buffered),默认缓冲区大小(通常 4KB 或 8KB),直到缓冲区满或程序退出才会刷新。

  • stderr(fprintf(stderr))的缓冲行为:
    无缓冲(unbuffered):无论输出到终端还是文件,stderr 会立即写入,不受缓冲区影响

解决


posted @ 2025-03-30 16:04  LdreamerD  阅读(56)  评论(0)    收藏  举报