Все операции Linux по вводу/выводу осуществляются посредством
4.4.1. Понятие о дескрипторах файлов
ulimit -n
' печатает это значение:
$ ulimit -n
1024
Из С максимальное число открытых файлов возвращается функцией getdtablesize()
(получить размер таблицы дескрипторов):
#include
int getdtablesize(void);
Следующая небольшая программа выводит результат работы этой функции:
/* ch04-maxfds.с --- Демонстрация getdtablesize(). */
#include
#include
int main(int argc, char **argv) {
printf("max fds: %d\n", getdtablesize());
exit(0);
}
Неудивительно, что после компиляции и запуска эта программа выводит то же значение, что и ulimit
:
$ ch04-maxfds
max fds: 1024
Дескрипторы файлов содержатся в обычных переменных int
; для использования с системными вызовами ввода/вывода можно увидеть типичные объявления вида 'int fd
'. Для дескрипторов файлов нет предопределенного типа.
В обычном случае каждая программа начинает свою работу с тремя уже открытыми для нее дескрипторами файлов. Это стандартный ввод, стандартный вывод и стандартная ошибка, с дескрипторами файлов 0, 1 и 2 соответственно. (Если не было использовано перенаправление, каждый из них связан с клавиатурой и с экраном.)