Проверяет понимание базовой абстракции операционной системы, используемой для работы с файлами и ввода-выводом.
Файловый дескриптор (file descriptor) — это абстрактный идентификатор, который операционная система выдаёт процессу при открытии файла, сокета, канала или другого ресурса ввода-вывода. Вместо того чтобы работать с путём к файлу напрямую, программа получает небольшое целое число, которое затем передаёт в системные вызовы для выполнения операций. Это позволяет унифицировать работу с разными типами ресурсов и упрощает управление доступом.
Когда процесс вызывает системный вызов open(), ядро создаёт запись в таблице открытых файлов процесса и возвращает индекс этой записи — дескриптор. Обычно первые три дескриптора зарезервированы: 0 — стандартный ввод (stdin), 1 — стандартный вывод (stdout), 2 — стандартный вывод ошибок (stderr). Все последующие открытые файлы получают номера начиная с 3.
Пример на языке C:
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd = open("file.txt", O_RDONLY);
if (fd == -1) {
// обработка ошибки
}
char buffer[100];
read(fd, buffer, sizeof(buffer));
close(fd);
return 0;
}Здесь fd — файловый дескриптор, который передаётся в read() и close().
Файловые дескрипторы лежат в основе практически всего ввода-вывода в Unix-подобных системах. Они используются для работы с файлами, сокетами, каналами (pipes), устройствами и даже для межпроцессного взаимодействия. Понимание дескрипторов важно для отладки утечек ресурсов, настройки лимитов (например, ulimit -n) и написания эффективного кода, работающего с большим количеством одновременных соединений.
Файловый дескриптор — это ключевая абстракция операционной системы, позволяющая программам единообразно работать с разнообразными источниками данных. Знание этой концепции необходимо для разработки системного ПО, сетевых приложений и понимания внутреннего устройства Unix-подобных ОС.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
Networks
Linux
Ключевые слова
Подпишись на Golang Developer в телеграм