Linux输出重定向到文件立即输出

./md.out > output.txt 2>&1

程序中断时,文件为空的原因可能是由于缓冲机制。标准输出(stdout)和标准错误输出(stderr)默认是缓冲的,这意味着数据在写入文件之前会先存储在缓冲区中。如果程序在缓冲区的数据被写入文件之前中断,这些数据将不会出现在文件中。

为了确保数据即时写入文件,你可以使用以下几种方法:

方法一:使用 stdbuf 设置无缓冲

stdbuf 可以控制标准输出和标准错误输出的缓冲模式。使用如下命令设置无缓冲:

stdbuf -oL -eL ./md.out > output.txt 2>&1

其中,-oL-eL 分别设置标准输出和标准错误输出为行缓冲模式,这样可以在每行输出后立即写入文件。

方法二:在程序代码中设置无缓冲

如果可以修改程序代码,可以在程序开始时设置标准输出和标准错误输出为无缓冲。以 C 或 C++ 程序为例:

#include <stdio.h>

int main() {
    setvbuf(stdout, NULL, _IONBF, 0);  // 设置标准输出为无缓冲
    setvbuf(stderr, NULL, _IONBF, 0);  // 设置标准错误输出为无缓冲
    
    // 你的程序代码
    return 0;
}

方法三:使用 fflush

在关键位置使用 fflush(stdout)fflush(stderr),确保缓冲区数据被即时写入文件。例如:

#include <stdio.h>

int main() {
    printf("This is a message.\n");
    fflush(stdout);  // 强制刷新标准输出缓冲区

    fprintf(stderr, "This is an error message.\n");
    fflush(stderr);  // 强制刷新标准错误缓冲区
    
    // 你的程序代码
    return 0;
}

方法四:使用 script 命令

script 命令可以捕获所有输出并立即写入文件:

script -q -c "./md.out" output.txt

script 命令会启动一个子shell,执行你的程序,并将所有输出写入指定文件。
注意:使用 script 命令虽然可以捕获所有输出并写入文件,但它的输出并不是实时更新的。

方法五:检查缓冲区大小设置

某些情况下,你可以通过设置环境变量来影响缓冲区行为。例如:

export PYTHONUNBUFFERED=1
./md.out > output.txt 2>&1

这对于 Python 脚本非常有效。

通过以上方法,你可以确保程序的输出被即时写入文件,避免因程序中断而导致文件为空的情况。

相关推荐

  1. Linux输出定向文件立即输出

    2024-07-20 20:14:03       27 阅读
  2. Linux 标准输出,错误输出定向文件

    2024-07-20 20:14:03       56 阅读
  3. Linux输出输入定向

    2024-07-20 20:14:03       40 阅读
  4. Linux Shell 021-输入输出定向

    2024-07-20 20:14:03       61 阅读
  5. Linux系列」Shell 输入/输出定向

    2024-07-20 20:14:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 20:14:03       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 20:14:03       109 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 20:14:03       87 阅读
  4. Python语言-面向对象

    2024-07-20 20:14:03       96 阅读

热门阅读

  1. buuctf-reverse write-ups (1)

    2024-07-20 20:14:03       17 阅读
  2. Android init.rc各阶段的定义和功能

    2024-07-20 20:14:03       27 阅读
  3. tebi.io免费对象存储,可托管静态网站

    2024-07-20 20:14:03       26 阅读
  4. 【vueUse库Array模块各函数简介及使用方法--下篇】

    2024-07-20 20:14:03       24 阅读
  5. 面经学习(厦门安全狗实习)

    2024-07-20 20:14:03       20 阅读
  6. 【项目-轻量级Web Server 定时器模块】

    2024-07-20 20:14:03       18 阅读
  7. C++学习笔记-用const修饰的类成员函数

    2024-07-20 20:14:03       20 阅读
  8. 量化机器人如何助力定量分析?

    2024-07-20 20:14:03       24 阅读
  9. 桌面应用打开默认全屏功能

    2024-07-20 20:14:03       23 阅读
  10. sqlalchemy打印query的SQL和参数

    2024-07-20 20:14:03       21 阅读
  11. 力扣2336.无限集中的最小数字

    2024-07-20 20:14:03       23 阅读
  12. Perl 语言入门学习

    2024-07-20 20:14:03       24 阅读
  13. 简单工厂模式

    2024-07-20 20:14:03       25 阅读
  14. MySQL基本语法规则 By 尚硅谷

    2024-07-20 20:14:03       21 阅读