作为日志旋转器通过管道传输到我的程序
Pipe to my program as a log rotator
我正在尝试实现我自己的日志旋转器(每当文件大小达到 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 Lücking的指点,我找到了方法。所以必须使用未格式化的读取。以下工作正常:
fstream file("log.txt", ios::out | ios::app);
while (getline(cin,lineInput,'\n'))
{
file << lineInput;
}
我正在尝试实现我自己的日志旋转器(每当文件大小达到 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 Lücking的指点,我找到了方法。所以必须使用未格式化的读取。以下工作正常:
fstream file("log.txt", ios::out | ios::app);
while (getline(cin,lineInput,'\n'))
{
file << lineInput;
}