我需要在我的 C 程序中同时打开 60 多个文本文件。但是,似乎 fopen 无法同时处理超过 60 个文件。我在 Windows 环境中编程。
我使用以下 fopen 语句:
fopen(fileName.c_str(),"wt");
其中 fileName 是我的 txt 文件的路径,名称在 100 个文件的循环内更改。有谁知道使这项工作的任何技巧?或者有什么替代方案?
如果您发出 bash shell 命令:
ulimit -n
您会看到 60 是您打开文件句柄的限制。你可以改变它:
ulimit -n 256
注意:您可以使用和看到软 ( -S
) 和硬 ( -H
) 限制,您可以将软限制更改为硬限制。-Sn
-Hn
实际上有两件事会限制您随时可以打开多少文件:
ulimit -n
。一旦您考虑到 STDIN、STDOUT 和 STDERR 已经被打开,您当前的限制可能是 63,而且我不知道有这么低的系统,所以它可能是您的ulimit
,但您需要了解其他限制。
在 Windows 上你可以使用_setmaxstdio(n)
,但在默认情况下你应该仍然能够打开 512 个文件。所以我仍然有点困惑,为什么除非你打开每个文件大约 8 次,否则你只会得到 60 奇数......