Разумно ли ожидать, что в 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
,