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

时间:2015-08-08 14:41:49

标签: c++ linux terminal pipe stdin

我正在尝试实现自己的日志循环器(每当filesize达到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

我的问题:如何让标准流媒体保留所有内容,包括标签,换行符等?

1 个答案:

答案 0 :(得分:2)

感谢DieterLücking的暗示,我找到了做到这一点的方法。因此,必须使用未格式化的读取。以下工作正常:

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