问题描述
我有一个使用 FILE 库写入文件的代码,并且通常有效,但我发现了一个不起作用的情况:当代码与 filebeat 进程同时运行时。
我不知道这个问题的原因,因为我的 C++ 项目不支持调试模式。
我正在参与一个别人开发的开源项目,我还不熟悉这个项目。
这是我的 C++ 代码:
FILE *fptr;
fptr = fopen("log_path.c_str()","w");
if (fptr == NULL)
{
printf("Error!");
exit(1);
}
fprintf(fptr,"%s",log.c_str());
fclose(fptr);
请给我一些建议。
解决方法
当您尝试写入文件时,您的代码出现管道中断异常。
当filebeat软件正在读取日志文件时,当c++代码尝试写入日志文件时,会发生此异常。
所以,我推荐使用这个 C++ 代码:
#include <fstream>
#include <iostream>
logFilePath = "this is path string of log file";
log = "this is log string";
ofstream output(logFilePath,ios::app);
output << log << endl;
output.close();
这段使用offstream库的代码将解决管道损坏异常。
如果你使用这个c++代码,它可以在文件写入过程中使用字符串类型,所以不需要通过c_str()进行类型转换。
我检查过这段代码可以与 File beat 7.10.0 一起使用。
谢谢。