Максимальное количество файлов, которые могут быть открыты c "fopen" в linux

каково максимальное количество файлов c fopen может одновременно открываться в Linux?

4 ответов


вы можете увидеть максимально разрешенные открытые файлы (ограничение ядра), выполнив:

cat /proc/sys/fs/file-max

цитата из ядра документы:

значение в файле-max обозначает максимальное количество файлов- ручки, что ядро Linux будет выделять. Когда получишь много из сообщений об ошибках о запуске дескрипторов файлов, вы можете хотите увеличить этот лимит.


реализация требуется для обеспечения FOPEN_MAX на <stdio.h>. Это минимальное количество файлов, которые могут быть открыты одновременно с гарантиями реализации. Вы могли бы открыть и больше, но единственный способ узнать это проверить.

обратите внимание, что ограничение ядра отделено от этого-это говорит вам, сколько файлов вы можете (потенциально) открыть с помощью open, creat и другие вызовы ОС. Стандартная библиотека вашей реализации C может (и часто будет) введут его собственный предел (например, статически выделяя массив FILE). Теоретически наибольшее число, которое вы можете открыть, - это минимум ограничения, наложенного ядром и реализацией библиотеки, но предел ядра -почти всегда (намного) выше.

вообще говоря, если вы заботитесь об этом, вы наверное делать что-то не так.


он определяется стандартом POSIX. Удаление его вызывает проблемы переносимости.Кроме того, этот макрос упоминается в glibc.info (по крайней мере, в redhat-7.1).Пожалуйста, обратитесь к ссылке ниже OPEN_MAX не определен в пределах.h.


этот код должен сообщить max на вашем компьютере. Создайте файл "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);
  }
}