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

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

  • автор:

Дескрипторы консоли

Процесс консоли получает доступ к входным буферам и буферам экрана консоли с помощью дескрипторов. Процесс может открыть один из этих дескрипторов с помощью функций GetStdHandle, CreateFile или CreateConsoleScreenBuffer.

Функция GetStdHandle предоставляет механизм получения связанных с процессом дескрипторов стандартного ввода ( STDIN ), стандартного вывода ( STDOUT ) и стандартных ошибок ( STDERR ). Во время создания консоли эти дескрипторы создаются системой. Изначально STDIN является дескриптором входного буфера консоли, а STDOUT и STDERR являются дескрипторами активного буфера экрана консоли. Но функция SetStdHandle может перенаправить стандартные дескрипторы путем изменения дескриптора, связанного с STDIN , STDOUT или STDERR . Так как стандартные дескрипторы родительского процесса наследуются любым дочерним процессом, последующие вызовы метода GetStdHandle возвращают перенаправленный дескриптор. Дескриптор, возвращенный с помощью GetStdHandle, может ссылаться на элемент, отличный от ввода-вывода в консоли. Например, перед созданием дочернего процесса родительский процесс может использовать SetStdHandle, чтобы задать канал STDIN , наследуемый дочерним процессом, в качестве канала дескриптора. Когда дочерний процесс вызывает GetStdHandle, он получает дескриптор канала. Это означает, что родительский процесс может управлять стандартными дескрипторами дочернего процесса. Дескрипторы, возвращаемые с помощью GetStdHandle, имеют права доступа GENERIC_READ | GENERIC_WRITE , если только с помощью метода SetStdHandle не был задан стандартный дескриптор с более ограниченным доступом.

Значение дескрипторов, возвращаемых с помощью GetStdHandle, не равно 0, 1 или 2, поэтому стандартные предопределенные константы потока в Stdio.h ( STDIN , STDOUT и STDERR ) нельзя использовать в функциях, для которых требуется дескриптор консоли.

Функция CreateFile позволяет процессу получить дескриптор для входного буфера консоли и активного буфера экрана, даже если STDIN и STDOUT были перенаправлены. Чтобы открыть дескриптор для входного буфера консоли, укажите значение CONIN$ при вызове CreateFile. Укажите значение CONOUT$ при вызове CreateFile, чтобы открыть дескриптор для активного буфера экрана консоли. CreateFile позволяет указать доступ только для чтения и записи в возвращаемом дескрипторе.

Функция CreateConsoleScreenBuffer создает буфер экрана и возвращает дескриптор. Этот дескриптор можно использовать в любой функции, которая принимает дескриптор для вывода в консоли. Новый буфер экрана не активен (не отображается), пока его дескриптор не будет указан в вызове функции SetConsoleActiveScreenBuffer. Обратите внимание, что изменение активного буфера экрана не влияет на дескриптор, возвращаемый методом GetStdHandle. Аналогичным образом использование SetStdHandle для изменения дескриптора STDOUT не влияет на активный буфер экрана.

Дескрипторы консоли, возвращенные методом CreateFile и CreateConsoleScreenBuffer, можно использовать в любой из консольных функций, которым необходим дескриптор для входного буфера консоли или буфера экрана консоли. Дескрипторы, возвращенные методом GetStdHandle, могут использоваться функциями консоли, если они не были перенаправлены для ссылки на элементы, отличные от ввода-вывода в консоли. Но если стандартный дескриптор был перенаправлен для ссылки на файл или канал, этот дескриптор может использоваться только функциями ReadFile и WriteFile. С помощью метода GetFileType можно определить тип устройства, на который ссылается этот дескриптор. Дескриптор консоли представлен как FILE_TYPE_CHAR .

Процесс может использовать функцию DuplicateHandle для дублирования дескриптора консоли, который имеет не такой уровень доступа или режим наследования, как у исходного дескриптора. Но обратите внимание, что процесс может дублировать дескриптор консоли только для собственного использования. Он отличается от других типов дескрипторов (таких как файл, канал или объекты мьютекса), для которых DuplicateHandle может создать дубликат, допустимый для другого процесса. Доступ к консоли должен быть общим во время создания другого процесса или запрашиваться другим процессом с помощью механизма AttachConsole.

Процесс может закрыть дескриптор консоли с помощью функции CloseHandle.

Обратная связь

Были ли сведения на этой странице полезными?

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

Author24 — интернет-сервис помощи студентам

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

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель?
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из.

Эксперт по пяченькам
67 / 67 / 12
Регистрация: 16.08.2011
Сообщений: 249

Вы про дескриптор файла?

Добавлено через 3 минуты
Если да, то лично я понимаю дескриптор, как своего рода указатель на файл (не в смысле сишного указателя), с помощью которого, можно проводить операции над конкретным файлом или в Linux-е с устройствами.

Регистрация: 22.02.2013
Сообщений: 33
И все же немного непонятно ! его можно как то увидить, управлять им ?
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

ЦитатаСообщение от roshax Посмотреть сообщение

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

Дескриптор есть некое данное, описывающее и однозначно идентифицирующее объект. Как именно дескриптор описывает объект и как идентифицирует, мелкомягкие определяют сами, а остальным достаточно уметь работать с ним, как с «чёрным ящиком».

Что такое файловый дескриптор в Linux

Файловый дескриптор в Linux характеризует процесс в системе, то как процесс использует при своей работе диск.

Как известно в Linux любая операция является файловой, по каждому процессу можно посмотреть привязку к открытым файлам на диске. Это могут быть пользовательские документы или служебные файлы Linux.

Файловый дескриптор в Linux

Файловый дескриптор может существовать на двух уровнях: общесистемном и для каждого запущенного процесса.

Файловые дескрипторы для каждого процесса (fdtable) не уникальны, но привязываются к v-node таблице, которая содержит значения для всей системы.

Системные вызовы fopen() и fileno() возвращают номера дескрипторов для процесса, то есть fdtable. Далее будем рассматривать только эту таблицу.

Дескрипторы привязываются к процессу.

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

  • 0 — STDIN
  • 1 — STDOUT
  • 2 — STDERROR

Используя эти значения можно, например, перенаправлять вывод или вывод ошибок в файл или в /dev/null избавляясь от него.

Для примера запустим процесс в фоне, за счёт амперсанда открепляем вывод (stdout) от консоли и можем работать в консоли при запущенном процессе.

[1] 9590

В консоль будет выведен идентификатор процесса, это в примере 9590. По нему можно смотреть информацию в частности при помощи утилиты lsof (list open files).

файловый дескриптор linux

Здесь интерес представляют четвертая и пятая колонки: FD и TYPE (файловый дескриптор и тип файлового дескриптора).

FD и TYPE для дескриптора

Для FD могут быть такие значения:

  • cwd – Current Working Directory
  • txt – Text file
  • mem – Memory mapped file
  • mmap – Memory mapped device

Номер дескриптора можно увидеть в последних строках вывода lsof в колонке FD: 0u, 1u и так далее.

Цифра это номер дескриптора. Буква показывает в каком режиме открыт файл.

r — чтение

w — запись

u — чтение и запись

Значения TYPE могут быть такими:

Еще можно увидеть дескрипторы в каталоге процесса (9590 — номер процесса)

0 1 2 3 4

При диагностике неполадок strace позволяет увидеть ожидание от определенного процесса и связанного с ним файлового дескриптора.

Дескриптор

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

Услуги, связанные с термином:

  • SEO-продвижение сайтов
  • Продвижение сайтов в ТОП
  • Базовая оптимизация
  • Сбор и кластеризация запросов

Сертифицированное агентство Яндекс

Сертифицированное агентство Яндекс

Сертифицированное агентство Google

Сертифицированное агентство Google

Сертифицированный партнёр ВКонтакте

Сертифицированный партнёр ВКонтакте

Сертифицированное агентство MyTarget

Сертифицированное агентство MyTarget

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

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