Разумно ли ожидать, что в Linux fd <максимальное количество дескрипторов открытых файлов?

Я пишу сервер, который должен обрабатывать много открытых сокетов, поэтому я использую setrlimit() установить максимальное количество дескрипторов открытых файлов (от имени root до удаления прав доступа) следующим образом:

#include <sys/resource.h>
#define MAX_FD_C 9001

if (setrlimit(
      RLIMIT_NOFILE, &(struct rlimit){.rlim_cur = MAX_FD_C, .rlim_max = MAX_FD_C}
    ) == -1) {
    perror("Failed to set the maximum number of open file descriptors");
    return EXIT_FAILURE;
}

Теперь я понимаю, что, вероятно, не будет никаких гарантий, и я во власти любого метода, который ядро ​​Linux использует для реализации таблиц файловых дескрипторов; но на практике, разумно ли предположить, что любой fd, полученный этой программой от ядра Linux, будет иметь значение меньше, чем MAX_FD_C, который я установил выше?

Я хотел бы, чтобы данные на сокете были как можно более компактными, что могло бы означать простое использование массива static struct client clients[MAX_FD_C] = {{0}}; и использование fd в качестве индекса для клиентской структуры (которая в основном была бы моей собственной версией FDT).

1 ответ

Решение

В стандарте POSIX есть функции, которые уже предполагают это. Посмотри на FD_SETSIZE, select(), FD_SET,

Другие вопросы по тегам