8

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

4

4 回答 4

11

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

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

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

于 2013-07-29T18:38:19.327 回答
3

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

cat /proc/sys/fs/file-max

引用内核文档:

file-max 中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量有关文件句柄用完的错误消息时,您可能希望增加此限制。

于 2013-07-29T18:37:09.557 回答
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);
  }
}
于 2018-01-12T15:34:33.613 回答
1

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

于 2013-07-29T18:55:57.200 回答