LINUX系统中:
1、使用/proc文件系统来控制系统/proc/sys/fs /proc/sys/fs/file-max 该文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。可将这个值设置成有任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。 缺省设置:4096 2、/proc/sys/fs/file-nr 该文件与 file-max 相关,它有三个值: 已分配文件句柄的数目 已使用文件句柄的数目 文件句柄的最大数目 该文件是只读的,仅用于显示信息。 所以不存在两个文件的配合修改问题,主要修改file-max就行了。
3、ulimit -a中
open files (-n) 1024 也即是ulimit -n -n The maximum number of open file descriptors (most systems do not allow this value to be set) ulimit -n <可以同时打开的文件数> 设置用户可以同时打开的最大文件数(max open files) 例如:ulimit -n 8192 如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误
Windows系统中:
Windows 下面程序的值是509,加上 <stdio> 和 <stdout> 和 <stderr> 文件句柄,系统这个值应该是512。其他的windows系统如果需要可以用跑一下下面的代码试一下。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int FILE_MAX = 0;
FILE* fp = NULL;
while (1)
{
fp = fopen("temp.txt", "r");
if (fp == NULL)
{
break;
}
FILE_MAX++;
}
printf("FILE_MAX = %d\n", FILE_MAX);
exit(0);
}