如何在仍然显示的同时将所有输出保存到屏幕?

时间:2016-02-15 17:27:39

标签: c shell

我目前正在为CS课程编写自定义shell。

它是一个基本的shell,它读入用户输入,检查shell函数,然后自行分叉并将解析的命令传递给execvp()。

当shell正在运行时,我需要将屏幕输出保存到文本文件中。我查看了freopen,但是切断了所有打印到屏幕上。

任何人都可以给我一个关于在哪个方向上执行此功能的提示吗?

1 个答案:

答案 0 :(得分:0)

您需要从标准输入读取并将相同内容写入标准输出以及标准错误的内容,这样您就可以打印一个,同时将其他内容保存在文件中。

这是一个简单的实现:

#include <stdio.h>
#include <unistd.h>

#define BUF_SIZE 1000

int main ()
{
    char buffer[BUF_SIZE];
    ssize_t read_size;

    while ((read_size = read (STDIN_FILENO, buffer, BUF_SIZE)) > 0)
    {
        if (write (STDOUT_FILENO, buffer, read_size) <= 0 ||
            write (STDERR_FILENO, buffer, read_size) <= 0)
            return 1;
    }

    return 0;
}

如果程序被调用dupl,那么你可以做这样的事情

ls | ./dupl 2> file

这将显示并将ls的标准输出保存到file