我是否只能自动将最后50行控制台输出写入文件

时间:2016-09-19 14:27:57

标签: c++ c++11

是否可以自动将最后50行控制台输出写入文件?

这样文件总是被最新的50行覆盖。

2 个答案:

答案 0 :(得分:3)

您可以使用shell修改和重定向程序的输出:

my_program | tail -n 50 > my_file

如果要截断文件,请使用简单重定向>;如果要追加文件,请使用双重重定向>>

注意:

如果您需要在2>&1

之后重定向stderr put my_program,此方法仅重定向stdout

答案 1 :(得分:1)

如果您真的想在C ++中执行此操作,则可以在程序运行时将控制台输出逐行存储在容器中,并在需要时将最后50行写入文件。

为输出函数编写一个包装器,每次在控制台上打印一行时,将其添加到std::queue。如果这使您的队列大于50个元素,请弹出最旧的元素(只需调用pop())。

class Logger {
    static std::queue<string> lastFifty;

    public static void log(const std::string& str) {
        lastFifty.push(str);
        if (lastFifty.size() > 50) {
            lastFifty.pop();
        }
        std::cout << str;
    }

    public static void dumpToFile(std::ofstream& file) {
        while (!lastFifty.empty()) {
            file << lastFifty.pop();
        }
    }
}