在命令行模式下将stdout内容复制到文件

时间:2014-06-26 05:11:56

标签: linux c stdio

我有这样的程序。我在终端模式。我想将outptu内容复制到另一个文件。首先我尝试重定向,但由于缓冲它没有工作。然后我尝试了unbuffer命令。但它对下面的案例没有正常工作

文件

main()
{
        int i;
        printf("Starting\n");
        scanf("%d",&i);
        printf("The value is %d\n",i);
}

输出

# ./a.out 
Starting
4
The value is 4

使用 unbuffer 命令输出

# unbuffer ./a.out | tee tt
Starting
4


^C

使用简单重定向输出[有效,但输出顺序不正确]

# ./a.out | tee tt
5
Starting
The value is 5

我希望将屏幕中显示的内容直接复制到文件中。我在终端模式下工作[没有GUI]。

1 个答案:

答案 0 :(得分:2)

默认情况下,

unbuffer doesn't read from standard input,所以你的程序只是等待而不会得到任何输入。您可以使用-p option

将其读取并传递标准输入
unbuffer -p ./a.out | tee tt

会奏效。缺点是它不会显示你写的内容。

或者,如果您控制C程序,则可以在标准输出不是终端时禁用默认缓冲。您可以使用例如setbuf

setbuf(stdout, NULL);

或在每次输出后手动刷新。