HANDLE похож на дескриптор файла в Linux? - PullRequest
10 голосов
/ 01 ноября 2011

HANDLE похож на дескриптор файла в Linux?Насколько я знаю, HANDLE используется для обработки всех ресурсов в Windows, таких как шрифт, значки, файлы, устройства ..., которые, по сути, являются просто пустым указателем на блок памяти, содержащий данные определенного ресурса

Ответы [ 4 ]

13 голосов
/ 25 мая 2015

Да, дескрипторы Windows очень похожи на файловые дескрипторы Unix (FD).

Обратите внимание, что HANDLE не является указателем на блок памяти.Хотя HANDLE равно typedef как void *, это просто делает его более непрозрачным.На практике HANDLE - это индекс, который ищется в таблице, так же как и номер FD.

В этом блоге рассматриваются некоторые сходства и различия: http://lackingrhoticity.blogspot.com/2015/05/passing-fds-handles-between-processes.html

4 голосов
/ 01 ноября 2011

Да, они концептуально похожи.Файловые дескрипторы в Unix отображают целые числа в таблицу процессов для указателей на другие объекты (которые могут быть и другими вещами, кроме файлов).Файловые дескрипторы не настолько унифицированы - некоторые вещи существуют в отдельном «пространстве имен» (например, таймеры процесса).В этом отношении Windows является более ортогональной - CloseHandle всегда освобождает ресурс независимо от того, что это такое.

0 голосов
/ 11 октября 2018

Помимо того факта, что дескрипторы относятся к гораздо более широкой концепции в Windows.Даже мы ограничиваем обсуждение только файловыми дескрипторами, есть существенные различия.Есть функция _open_osfhandle () как часть библиотеки времени выполнения C в Windows.Его цель - процитировать «Связывает дескриптор файла времени выполнения C с существующим дескриптором файла операционной системы».То есть, связующая функция между землей ядра и землей времени выполнения C.Сигнатура функции выглядит следующим образом:

int _open_osfhandle (
    intptr_t osfhandle,
    int flags
);

Файловые дескрипторы Windows на самом деле более многофункциональна, чем файловые дескрипторы в C, которые можно настроить, когда дескриптор файла создается с помощью CreateFileA (версия ANSI) или CreateFile (UTF16версия), отражая разницу в дизайне между * Nix и Windows.И полученный дескриптор несет всю эту информацию со всеми ее последствиями.

0 голосов
/ 30 июля 2012

A HANDLE - пустой указатель

typedef PVOID HANDLE;
typedef void *PVOID;

Типы данных Windows

...