定期访问不断更新文件?

时间:2016-06-13 17:59:58

标签: terminal

我有一个程序(c ++)将数据输出到终端。我在SSH上的机器上运行它。我需要能够:

  1. 关闭会话后运行程序
  2. 访问到目前为止已输出的数据,同时程序继续输出数据。
  3. 现在,我一直这样做:

    nohup ./freqnew <testparams.txt &> testrun3.out&
    

    这几乎是我想要的。它将程序中的数据放入文件testrun3.out中,并在关闭终端窗口后在后台运行。但是,在程序完成之前,.out文件完全为空。

    当我开始长时间运行时,它们可能需要数周时间,但我需要定期访问数据以确保它是合理的。

    有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您应该尝试flush()将数据推送到磁盘: http://www.cplusplus.com/reference/ostream/ostream/flush/

答案 1 :(得分:0)

由于您正在使用程序的输出,因此您可以使用teescript将输出重定向到文件,而那些显然具有更好的刷新功能(like in this answer)。

这也让你可以看到屏幕上的输出并将其保存到磁盘(如果这是一个理想的功能)。

nohup ./freqnew <testparams.txt 2>&1 | testrun3.out

答案 2 :(得分:0)

一种选择是将cout重定向到您想要的文件:

std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!