管道到我的程序作为一个日志旋转器

Pipe to my program as a log rotator

本文关键字:一个 日志 旋转 我的 程序 管道      更新时间:2023-10-16

我正在尝试实现我自己的日志旋转器(每当文件大小达到10 MB时创建新的日志文件)。读取标准输入并将其写入文件的部分如下:

fstream file("log.txt", ios::out | ios::app);
while (std::cin >> lineInput) {
    file << lineInput;
}

但是问题是管道数据被破坏了。制表符和新行总是会丢失。例如,如果我的程序名称是LogRotator,那么命令:

ls | ./LogRotator

只是将所有文件名连接在一起,像这样:

LogRotatormain.oMakefile

,而ls的输出为:

LogRotator main.o Makefile

我的问题:我如何使标准流保存一切,包括制表符,换行符等?

多亏了Dieter lcking的提示,我找到了做这件事的方法。因此必须使用未格式化的读取。

fstream file("log.txt", ios::out | ios::app);
while (getline(cin,lineInput,'n'))
{
    file << lineInput;
}