gpt4 book ai didi

c++ - 创建大量文件后,fopen失败并显示EFBIG “File too large”

转载 作者:行者123 更新时间:2023-12-03 08:19:12 24 4
gpt4 key购买 nike

我正在创建一个程序,该程序根据一些输入来创建小文件(8 kb),所以它像这样

#include <iostream>
#incclude <string.h>
#include <errno.h>

void func()
{
const char * file_name = NULL;
// we get file_name from somewhere , ex : pic.png
FILE * fp = fopen();
if (fp == NULL)
{
std::cout << "failed to open file , " << strerror(errno) << std::endl ;
return 0;
}
// some code to deal with the file
}

我创建了很多文件(大约420万个,我正在尝试测试性能)
并且总是大约相同数量会导致EFBIG错误(文件太大)
虽然我每次都创建新的唯一文件。

这些文件是在8个线程中创建的。

有什么解释的想法吗?

我想澄清一下,这显然不是确切的代码,但是您可以认为此函数会以高频率在8个线程中运行,直到生成该错误为止,并且从那时起,所有文件都会生成此错误,直到程序完成为止

最佳答案

我实际上找不到任何针对Linux的文档,但是由于您的文件数显然达到了最大的32位无符号整数(4,294,967,295),因此听起来您的文件系统不能在一个目录中处理这么多文件。错误“太大”实际上是指目录,而不是您要打开的文件。

单个目录中的文件数量如此之多。只需将它们分成不同的目录。

另外,请注意不要一次打开成千上万个文件句柄。您的操作系统将对此设置一个限制(您可以使用ulimit -a进行检查)。但是,在耗尽此供应后,您应该获得EMFILE

关于c++ - 创建大量文件后,fopen失败并显示EFBIG “File too large”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61781338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com