2

我需要在我的 C 程序中同时打开 60 多个文本文件。但是,似乎 fopen 无法同时处理超过 60 个文件。我在 Windows 环境中编程。

我使用以下 fopen 语句:

fopen(fileName.c_str(),"wt");

其中 fileName 是我的 txt 文件的路径,名称在 100 个文件的循环内更改。有谁知道使这项工作的任何技巧?或者有什么替代方案?

4

2 回答 2

2

如果您发出 bash shell 命令:

ulimit -n

您会看到 60 是您打开文件句柄的限制。你可以改变它:

ulimit -n 256

注意:您可以使用和看到软 ( -S) 和硬 ( -H) 限制,您可以将软限制更改为硬限制。-Sn-Hn

于 2013-09-04T09:02:59.533 回答
2

实际上有件事会限制您随时可以打开多少文件:

  1. 指定的环境限制ulimit -n
  2. C 运行时库。我知道有几个将您限制为 256 个文件句柄(Sun 举个例子)

一旦您考虑到 STDIN、STDOUT 和 STDERR 已经被打开,您当前的限制可能是 63,而且我不知道有这么低的系统,所以它可能是您的ulimit,但您需要了解其他限制。

在 Windows 上你可以使用_setmaxstdio(n),但在默认情况下你应该仍然能够打开 512 个文件。所以我仍然有点困惑,为什么除非你打开每个文件大约 8 次,否则你只会得到 60 奇数......

于 2013-09-04T09:17:53.627 回答