linux中c“fopen”可以打开的最大文件数

时间:2013-07-29 18:33:19

标签: c fopen

c fopen可以在Linux中同时打开的最大文件数是多少?

4 个答案:

答案 0 :(得分:11)

需要在FOPEN_MAX中提供<stdio.h>。这是可以同时打开实现保证的最小文件数。您可以打开更多,但唯一的方法就是测试。

请注意,内核限制与此分开 - 它告诉您使用opencreat和其他OS调用可以(可能)打开多少文件。 C实现的标准库可以(并且经常会)强加自己的限制(例如,通过静态分配FILE数组)。理论上,您可以打开的最大数量是内核和库实现所施加的限制的最小值 - 但内核的限制几乎总是(更高)。

一般来说,如果你关心这一点,你可能可能做错了。

答案 1 :(得分:3)

您可以通过执行以下操作查看允许的最大打开文件数(内核限制):

cat /proc/sys/fs/file-max

Quote from kernel docs:

  

file-max中的值表示文件的最大数量 -   处理Linux内核将分配的内容。当你得到很多   有关用完文件句柄的错误消息,您可能会这样做   想增加这个限制。

答案 2 :(得分:2)

此代码应告知您计算机上的最大值。在同一文件夹中创建一个文件“test”并运行它。它基本上一直打开文件,直到它不能再存在。

# include <assert.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <sys/wait.h>
# include <string.h>
# include <fcntl.h>


int main(){
  int t;

  for(;;){
    t = open("test", O_RDONLY);
    if (t < 0){
      perror("open");
      exit(1);
    }
    printf("%d: ok\n", t);
  }
}

答案 3 :(得分:1)

由POSIX标准定义。删除它会导致可移植性问题。另外,glibc.info中提到了这个宏(至少在redhat-7.1中)。请参考下面的链接 OPEN_MAX not defined in limits.h