Что такое дескриптор в программировании
Перейти к содержимому

Что такое дескриптор в программировании

  • автор:

Дескриптор — что это в программировании

vedro-compota's picture

Дескриптор (видимо от англ «describe/description» = «описывать/описание») — это некий набор данных (часто это переменная/объект особого типа), описывающий какую-либо сущность, но при этом им не являющийся.
(что вроде паспорта какой-либо страны, относительно реального человека).

Дескриптор файла

Дескриптор файла — часто это переменная того типа данных, который возвращает в вашем ЯП, например, функция открытия файла, в этом случае дескриптор обычно, помимо прочего, содержит сведения об адресе расположения файла (например, пути к нему в рамках файловой системы).

Что такое дескриптор.

Обьясните пожалуйста, что такое дескриптор, касаясь функции winmain. Вот я читаю справку из msdn от vc++ на счет синтаксиса этой функции и там написано, что первые два параметра это дескрипторы, что это значит?

#1
13:38, 11 дек 2006

HINSTANCE. Уникальный идентификатор (число), ассоциированный с экземпляром твоего приложения, выполняемого в Windows.

Гы, помню классе в шестом я курил книжку по программированию под винду. Мне потребовалось 5 недель, чтобы осознать, что такое дескриптор окна =)

#2
13:45, 11 дек 2006

Если не трудно, вот само слово дескриптор что значит? Пожалуйста.:)

#3
13:47, 11 дек 2006

>Если не трудно, вот само слово дескриптор что значит? Пожалуйста.:)
Буквально — описатель. Идентификатор, как уже сказал ZET

#4
14:10, 11 дек 2006

Yaricoss
Твой гражданский паспорт, это твой дескриптор. ФСБ, зная серию и номер твоего паспорта, могут получить о тебе информацию и по ней найти тебя. Этот дескриптор уникальный, то есть ФСБ однозначно на тебя выйдут, а не на кого-то другого.

Аналогично, дескриптор может иметь приложение. Используется вместо, например, указателя, поскольку не все языки программирования могут использовать указатели. Также и окно определяется дескриптором. Например у тебя в программе несколько окон, нужно одно открыть, другое закрыть. При помощи дескрипторов окна (HWND) ты определяешь — с каким конкретно окном будешь работать.

#5
14:46, 11 дек 2006

Спасибо. Понятней определения наверно нигде не найдешь! А вот второй(если не лень то третий и четвертый) параметр WinMain можете разъяснить. Буду очень благодарен.

#6
14:52, 11 дек 2006

Напишу несколько статей под названием «Чайник — Чайнику. DirectX 9», чтоб чайники, типа меня не задавали таких вопросов.

#7
16:57, 11 дек 2006

Yaricoss
>Спасибо. Понятней определения наверно нигде не найдешь! А вот второй(если не
>лень то третий и четвертый) параметр WinMain можете разъяснить. Буду очень благодарен.
>Напишу несколько статей под названием «Чайник — Чайнику. DirectX 9», чтоб
>чайники, типа меня не задавали таких вопросов.
Какое отношение WinMain() имеет к DirectX 9?
По поводу аргументов WinMain надо идти сюда: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/… s/winmain.asp

#8
20:32, 11 дек 2006

Ну, незнаю(пока) какое это отношение имеет к Directx, вам виднее. Во всяком случае, winmain я встречал во многих примерах из dx sdk. Ссылка конечно хорошая, но это все и даже большее у меня есть(из msdn от vc++). Хотелось бы увидеть чтонибудь, написанное простым всем понятным языком.

#9
20:58, 11 дек 2006

Yaricoss
Если тебе МСДН не по зубам (хе-хе. ), найди где-нить книжку «Чарльз Калверт. Освой самостоятельно программирование в Windows за 21 день». У меня есть довольно старое издание, времён Windows 95. не знаю, может её переиздавали с учётом развития отрасли. Однако, несмотря на давность, весь материал актуален даже сейчас. Книга просто офигенно на пальцах рассказывает о программировании под винду с нуля. Чисто WinAPI на Си, без дотнетов, даже без MFC. Первые страниц 200 разжёвывают базу, но страницы с 600ой книга становится довольно непростой в освоении для начинающего, и в целом она покрывает очень большой объём информации. Рассматриваются вопросы организации windows-приложения, создание окон, common controls, GDI, ресурсы windows, диалоги, немного извращённых техник типа сабклассинга, механизмы управления памятью, механизмы многозадачности (в том числе методы синхронизации), многооконные приложения.

Если хочется хардкорщины, можно искать в инете E-Book «Джеффри Рихтер. Что-то там типа кодинг под винду и бла бла». На английском есть онлайн нахаляву, во многих местах. Эта книга подразумевает, что вы уже полностью понимаете все основные вещи.

Что такое дескриптор в программировании

Евдокимов А.А., Майстренко Н.В., Майстренко А.В.

2.3.3.1. Дескрипторы

Ссылки пользовательского режима на объекты режима ядра не могут использовать указатели, поскольку их трудно проверить. Для ссылки на объекты режима ядра Windows использует описатели(handles, часто также называемые дескрипторами).

Описатели — это неявные значения, которые конвертируются диспетчером объектов в ссылки на представляющие объект специфические структуры данных режима ядра.

На рис. 2.8 показана структура данных таблицы дескрипторов, используемой для трансляции описателей в указатели на объекты.

На рис. 2.9 показана таблица описателей с двумя дополнительными уровнями косвенного обращения. Для выполняющегося в режиме ядра кода иногда бывает удобно иметь возможность использовать описатели (а не указатели со ссылками).

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

Рис

Точно так же как и большая часть виртуального адресного пространства ядра, системная таблица описателей совместно используется всеми компонентами ядра вне зависимости от того, какой процесс пользовательского режима является текущим.

Дескриптор (вычисление) — Handle (computing)

В компьютерном программировании дескриптор является abstract ссылка на ресурс, который используется, когда прикладное программное обеспечение ссылается на блоки памяти или объекты, которые управляются другой системой, например база данных или операционная система.

Дескриптор ресурса может быть непрозрачным идентификатором, и в этом случае это часто целое число число (часто индекс массива в массиве или «таблице», который используется для управления этим типом ресурса), или это может быть указатель , который позволяет получить доступ к дополнительной информации. Обычные дескрипторы ресурсов включают дескрипторы файлов, сетевые сокеты, соединения с базой данных, идентификаторы процессов (PID) и идентификаторы заданий. PID и идентификаторы заданий — это явно видимые целые числа; в то время как файловые дескрипторы и сокеты (которые часто реализуются как форма файлового дескриптора) представлены как целые числа, они обычно считаются непрозрачными. В традиционных реализациях файловые дескрипторы представляют собой индексы в (для каждого процесса) таблице файловых дескрипторов, а затем в (общесистемной) файловой таблице.

  • 1 Сравнение с указателями
  • 2 Безопасность
  • 3 Примеры
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Сравнение с указателями

Хотя указатель содержит адрес элемента, на который он ссылается, дескриптор — это абстракция ссылки, которая управляется извне; его непрозрачность позволяет системе перемещать референт в памяти без аннулирования дескриптора, что невозможно с указателями. Дополнительный уровень косвенного обращения также увеличивает контроль, который система управления имеет над операциями, выполняемыми над референтом. Обычно дескриптор является индексом или указателем на глобальный массив надгробий.

A дескриптор утечки — это тип программной ошибки, которая возникает, когда компьютерная программа запрашивает дескриптор для ресурс, но не освобождает дескриптор, когда он больше не используется; это форма утечки ресурсов, аналогичная утечке памяти для указателя на память.

Безопасность

В терминах безопасных вычислений, поскольку доступ к ресурсу через дескриптор опосредован другой системой, дескриптор функционирует как возможность : он не только идентифицирует объект, но и связывает права доступа. Например, хотя имя файла можно подделать (это просто угадываемый идентификатор), дескриптор присваивается пользователю внешней системой и, таким образом, представляет собой не только личность, но и предоставленный доступ.

Например, если программа хочет прочитать файл системного пароля ( / etc / passwd ) в режиме чтения / записи ( O_RDWR ), она может попытаться откройте файл с помощью следующего вызова:

int fd = open ("/ etc / passwd", O_RDWR);

Этот вызов просит операционную систему открыть указанный файл с указанными правами доступа. Если ОС позволяет это сделать, она открывает файл (создает запись в таблице дескрипторов файла для каждого процесса ) и возвращает дескриптор (дескриптор файла, индекс в этой таблице) пользователю: фактический доступ управляется ОС, и дескриптор является токеном этого. И наоборот, ОС может запретить доступ и, таким образом, не открыть файл и не вернуть дескриптор.

В системе, основанной на возможностях, дескрипторы могут передаваться между процессами с соответствующими правами доступа. Обратите внимание, что в этих случаях дескриптор должен быть чем-то другим, кроме уникального для всей системы небольшого целого числа, в противном случае его можно подделать. Тем не менее такое целое число может использоваться для идентификации возможности внутри процесса; например, файловый дескриптор в Linux невозможно подделать, потому что одно его числовое значение не имеет смысла и только в контексте процесса может относиться к чему угодно. Однако передача такого дескриптора требует особой осторожности, поскольку его значение часто должно быть различным в процессах отправки и получения.

В системах, не основанных на возможностях, с другой стороны, каждый процесс должен получить свой собственный отдельный дескриптор, указав идентификатор ресурса и желаемые права доступа (например, каждый процесс должен сам открывать файл, указав имя файла и режим доступа). Такое использование более распространено даже в современных системах, которые поддерживают передачу дескрипторов, но оно подвержено уязвимостям, таким как проблема запутанного заместителя.

Примеры

Дескрипторы были популярным решением для управления памятью. в операционных системах 1980-х годов, таких как Mac OS и Windows. Структура данных FILE в стандартной библиотеке ввода-вывода C — это дескриптор файла, абстрагирующийся от базового представления файла (в Unix это файл дескрипторы ). Подобно другим средам рабочего стола, Windows API широко использует дескрипторы для представления объектов в системе и обеспечения канала связи между операционной системой и пользовательским пространством. Например, окно на рабочем столе представлено дескриптором типа HWND (дескриптор, окно).

Двойные косвенные дескрипторы в последнее время потеряли популярность, поскольку увеличение доступной памяти и улучшенные алгоритмы виртуальной памяти сделали использование более простого указателя более привлекательным. Однако во многих операционных системах этот термин по-прежнему применяется к указателям на непрозрачные, «частные» структуры данных — непрозрачные указатели — или на индексы во внутренние массивы, переданные от одного процесса на его клиент.

См. также

Ссылки

Внешние ссылки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *