C++:文件节拍进程运行时使用 FILE 库写入文件的问题

问题描述

我有一个使用 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 一起使用。

谢谢。