首页 > 解决方案 > fopen 几分钟后无法打开文件

问题描述

我想在文件中写一些日志。

这是我的代码:

FILE *writefile = fopen((Dir + FileName).data(), "at");
if (writefile)
{
    fprintf(writefile, log.data());
    fclose(writefile);
}

当我第一次尝试写作时,它肯定会起作用。

此代码在网络系统中执行,但在无连接状态下执行。

所以,它每秒都在写日志“Try Connct”。

这是我想写的图像

我可以在我的控制台上看到这些日志。

在图像中,我尝试在 11:10:00 写入日志。

但在 File 中,直到 11:06:00 才写入。

我尝试调试我的代码,

这是调试中的图像

为什么会发生这种情况?

- -添加 - -

我尝试打印错误。所以,我用了perror。

我收到错误:打开的文件太多。

但为什么?显然我关闭了文件,正如您在我的代码中看到的那样。

标签: c++

解决方案


您的程序中存在资源泄漏。open/ dup/ fopen/ stream::open/ pipe/ / /没有匹配/ connect/ accept/的调用太多。socketclosefclose~streamstream::close

如果发生FILE泄漏,您可以通过以下方式之一避免它:

不幸的是,没有简单的方法可以找到这个泄漏。最好的方法是从一开始就避免它,将RAIIstd::stream, std::unique_ptrboost asio一起使用。由于代码没有遵循这个规则,唯一的出路是fopen通过代码搜索(和其他人),并使其使用 RAII,可能使用unique_ptr.


推荐阅读