![磁盘空间释放后如何继续输出到文件?](https://linux22.com/image/1358049/%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E9%87%8A%E6%94%BE%E5%90%8E%E5%A6%82%E4%BD%95%E7%BB%A7%E7%BB%AD%E8%BE%93%E5%87%BA%E5%88%B0%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在像这样存储程序的输出:
./programOutputtingTextToStandartOut > program.log
如果磁盘已满,即使程序仍在运行,输出也会停止写入。有没有办法设置,以便当出现可用磁盘空间时,文件写入会自动恢复 - 而无需重新启动程序?
更新
添加示例程序OutputtingTextToStandartOut。
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string textLine = "Some text";
ostream* out = &cout;
while (true) {
(*out) << textLine << endl << flush;
usleep(500000);
}
}
答案1
我建议,不要在控制台级别重定向输出,而是使用程序本身来管理日志。因此,在这种情况下,您可以在每 N 次操作时检查磁盘空间。如果磁盘空间小于最低订阅值 - 停止记录。一旦它低于下限 - 重新创建日志文件并继续记录。虽然需要一定程度的代码,但它将是控制日志的最佳方式。