LINUX.ORG.RU

История изменений

Исправление faq2, (текущая версия) :

Дескриптор, он же хэндл(в windows терминологии) - это способ инкапсуляции.

Например, у тебя есть в ядре структура описывающая файл, она хранится где-то в области памяти ядра буквально как указатель на структуру. Но, чтобы твои кривые ручки из юзерленда не попортили эту структуру (ну и не получили segfault), введён мэппинг «чиселко»:«указатель на структуру». Чиселки даются в юзерлэнд, а внутри вызовов ядра конвертируются обратно в указатели. Дескриптор не обязан быть чиселком, но чаще всего это всё-таки оно.

Т.е. это буквально способ надёжно разделить два слоя, ценой определённых накладных расходов на мэппинг. Так делают не только в ситуации юзерлэнд<->ядро, но и в случаях например клиент <-> проприетарная библиотека.

Иногда, хэндл отличают от дескриптора по признаку: хэндл может быть передан на другой узел через IPC и останется после этого валидным, а дескриптор не может.

Исходная версия faq2, :

Дескриптор, он же хэндл(в windows терминологии) - это способ инкапсуляции.

Например, у тебя есть в ядре структура описывающая файл, она хранится где-то в области памяти ядра буквально как указатель на структуру. Но, чтобы твои кривые ручки из юзерленда не попортили эту структуру (ну и не получили segfault), ввён мэппинг «чиселко»:«указатель на структуру». Чиселки даются в юзерлэнд, а внутри вызовов ядра конвертируются обратно в указатели. Дескриптор не обязан быть чиселком, но чаще всего это всё-таки оно.

Т.е. это буквально способ надёжно разделить два слоя, ценой определённых накладных расходов на мэппинг. Так делают не только в ситуации юзерлэнд<->ядро, но и в случаях например клиент <-> проприетарная библиотека.

Иногда, хэндл отличают от дескриптора по признаку: хэндл может быть передан на другой узел через IPC и останется после этого валидным, а дескриптор не может.