我可以一次打开多少个文件?

时间:2010-03-11 13:09:57

标签: c io disk

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

我尝试读取一些应该告诉它的常量,但是在Windows XP 32位上,这是一个不可思议的20或者其他东西。虽然它似乎工作得很好,但是我还没有对它进行过广泛的测试。

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

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

3 个答案:

答案 0 :(得分:3)

进程可以使用getrlimit system-call来查询限制。

#include<sys/resource.h>
struct rlimit rlim;
getrlimit(RLIMIT_NOFILE, &rlim);
printf("Max number of open files: %d\n", rlim.rlim_cur-1);

答案 1 :(得分:2)

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

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

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

<击> 当open()将fd返回为int时 - int的大小也限制为上限。 (与INT_MAX无关)

答案 2 :(得分: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