5

在典型的操作系统上,我可以使用标准 C 盘 IO 一次打开多少个文件?

我试图读取一些应该告诉它的常量,但在 Windows XP 32 位上,这只是微不足道的 20 或其他东西。虽然它似乎与 30 多个一起工作得很好,但我还没有对它进行广泛的测试。

我最多需要一次打开大约 400 个文件,所以如果大多数现代操作系统都支持它,那就太棒了。它不需要支持 XP,但应该支持 Linux、Win7 和最新版本的 Windows 服务器。

另一种方法是编写我自己的迷你文件系统,如果可能的话我想避免。

4

3 回答 3

3

在 Linux 上,这取决于可用文件描述符的数量。您可以使用ulimit -n设置/显示每个 shell 的可用 FD 数量。

请参阅这些说明以了解如何检查(或更改)Linux 中可用总 FD:s 的值。

这篇 IBM 支持文章建议在 Windows 上编号为 512,您可以在注册表中更改它(按照文章中的说明)

Asopen()返回 fd as int- int 的大小限制也是上限。 (无关,因为 INT_MAX 很多)

于 2010-03-11T13:18:56.190 回答
3

进程可以使用 getrlimit 系统调用查询限制。

#include<sys/resource.h>
struct rlimit rlim;
getrlimit(RLIMIT_NOFILE, &rlim);
printf("Max number of open files: %d\n", rlim.rlim_cur-1);
于 2010-03-11T13:21:18.460 回答
1

仅供参考,作为 root,您必须首先修改 /etc/security/limits.conf中的“nofile”项。例如:

*                hard    nofile          10240
*                soft    nofile          10240

(limits.conf 中的更改通常在用户登录时生效)

然后,用户可以使用ulimit -n bash 命令。我在 Fedora 11 上测试了多达 10,240 个文件。

ulimit -n <max_number_of_files>

最后,所有这些都受到内核限制的限制,由下式给出:(我想你可以在其中回显一个值以使其更高......风险自负)

cat /proc/sys/fs/file-max

另外,请参阅http://www.karakas-online.de/forum/viewtopic.php?t=9834

于 2011-05-25T14:29:40.900 回答