_setmaxstdio 最大打开文件数仅为 2048?

Posted

技术标签:

【中文标题】_setmaxstdio 最大打开文件数仅为 2048?【英文标题】:_setmaxstdio max open files is 2048 only? 【发布时间】:2009-11-26 13:02:54 【问题描述】:

http://msdn.microsoft.com/en-us/library/6e3b887c(VS.80).aspx

有没有办法让每个应用程序使用 _wopen 一次打开超过 2048 个文件。

32 或 64 位操作系统 - 相同的限制!

【问题讨论】:

【参考方案1】:

没有。 通过查看 CRT 源代码,我们可以知道 CRT 限制了最大数量。

 /*
 * Make sure the request is reasonable.
 */
_VALIDATE_RETURN(((maxnum >= _IOB_ENTRIES) && (maxnum <= _NHANDLE_)), EINVAL, -1);

NHANDLE

#define _NHANDLE_           (IOINFO_ARRAYS * IOINFO_ARRAY_ELTS)

那些常量:

/*
 * Definition of IOINFO_L2E, the log base 2 of the number of elements in each
 * array of ioinfo structs.
 */
#define IOINFO_L2E          5

/*
 * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
 */
#define IOINFO_ARRAY_ELTS   (1 << IOINFO_L2E)

/*
 * Definition of IOINFO_ARRAYS, maximum number of supported ioinfo arrays.
 */
#define IOINFO_ARRAYS       64

如您所见,它受到 CRT 实施的限制。

【讨论】:

【参考方案2】:

没有。

我相信限制与从 CreateProcess 调用继承打开文件的能力有关。 CreateProcess 只有 2048 个用于传递句柄的槽(在 32 位和 64 位上)。您可以调试程序并进入系统、执行或生成 CRT 函数以查看 2048 个插槽的限制。

如果您使用 Win32 文件 API(CreateFile、WriteFile、ReadFile、CloseHandle 等),那么您对打开的文件没有限制(嗯,您有,但我相信它基于您的资源,例如内存)。

【讨论】:

【参考方案3】:

见Is there a limit on number of open files in Windows。

从接受答案的 cmets 看来,没有办法改变这一点。或许您可以使用“CreateFile”api 调用来代替 _wopen?

【讨论】:

以上是关于_setmaxstdio 最大打开文件数仅为 2048?的主要内容,如果未能解决你的问题,请参考以下文章

检查PHP中是否超出了最大上传文件数

Linux最大打开文件数

MySQL 5.7.11 超过最大打开文件数crash原因和参数open_files_limit

ulimit 设置 最大 打开文件数(祝大家 未来 精彩无限 -- unlimited)

如何设置 nginx 最大打开文件数?

可以在 C# 中打开的最大文件数是不是有限制?