Тарифы Услуги Сим-карты

Что такое дескрипторы файлов, объясненные простыми словами? Что это - дескриптор? Описание структуры атрибута

В общих чертах, дескрипторы — это некие атрибуты объектов, для которых определено соответствующее поведение. При доступе к ним происходит получение, установка или удаление указанных атрибутов из словаря. Говоря простым языком, это особые ключевые слова, определяющие поведение объекта, его свойства или структуру. В статье будет рассмотрено несколько вариантов дескрипторов. Это позволит более точно понять их суть и предназначение.

HTML

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

Как правило, специфика языка определяет наличие открывающего дескриптора и закрывающего. Все, что между ними, подвержено изменению.

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

Подчиняясь общей логике, дескрипторы в HTML представляют собой идентификационные метки объектов. С их помощью можно управлять внешним видом, взаимодействовать со страницей и присваивать ей особые значения.

Архитектура х86

В процессорах дескрипторы — это особая структура, с помощью которой совершаются различные переходы. Её строение выглядит так:

  • Смещение. Может сдвинуть процедуру кода.
  • Селектор. Отражает своего рода метку, куда должна перейти процедура.
  • Количество параметров.
  • Права доступа.

Java

В Java EE имеется понятие дескриптора развёртывания. Он определяет то, каким образом будет развёрнут сервлет. По сути, это конфигурационный файл, содержащий настройки, свойства и требования к аппаратной части.

В веб-приложениях такой файл по правилам должен называться web.xml и располагаться в определённой папке.

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

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

Операционная система Windows позволяет обратиться к дескриптору с помощью функции CreateFile. Его можно в дальнейшем использовать при работе с требуемым файлом.

В Unix системах для файлового дескриптора используется цифровые обозначения. 0 — стандартный ввод процесса терминала, 1 — его вывод, 2 — поток диагностики. Помимо числовых представлений можно использовать символические константы, определённые спецификацией.

Дескриптор окна

После того как в системе создаётся любое окно, ему присваивается определённый дескриптор. Типы данных применяемых в нем — HWND. Программисту, при создании приложения, нужно правильно использовать их для обращения к

Программа может получить дескриптор, обратившись к помощи функции FindWindow. Она по имени класса или объекта окна сможет его найти и вернуть значение дескриптора.

Чтобы проверить, правильно ли прошла идентификация, стоит использовать функцию IsWindow.

Ошибка номер 1400

Данная проблема часто встречается в семействе операционных систем Windows. При её появлении вместе с ней может быть и краткое описание — недопустимый дескриптор окна. А может встречаться и такая формулировка - «Error_invalid_window_handle» или 0х578.

Как бороться и что значит неверный дескриптор? В зависимости от контекста объекта, нужно принимать разные меры.

В любом случае стоит сразу же пройтись по стандартным мерам, принимаемым ко всем проблемам с системой:

  • запуск и сканирование ошибки с помощью утилиты проверки целостности системных файлов;
  • проверить компьютер на вирусы.
  • Если базовые шаги не помогли, то, возможно, стоит удалить и снова установить приложение, которое вызывает сбой.

    Ещё один надёжный способ быстро восстановить работоспособность системы — сделать её откат с помощью стандартных инструментов. После использования «Восстановления системы», она вернётся к последней действующей резервной копии, при условии что она была ранее создана.

    Когда может возникнуть ошибка

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

    Заключение

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

    А также стало ясно, что это — неверный дескриптор. Как оказалось, это распространённая проблема в среде Windows, в большинстве случаев решаемая простыми манипуляциями.

    Расскажу о структуре лендинга так, как нас учили на Бизнес Молодости. Что такое лендинг и для чего он нужен, объяснять не буду, об этом уже написано на этом сайте. Сначала напишу о том, что должно быть в шапке вашего лендинга.

    Логотип

    Итак, первое - логотип. Это больше статусная вещь. Если он у вас есть, хорошо, если нет – не страшно. Не нужно тратить недели на придумывание логотипа. Для начала подойдет любой, который вы можете заказать у фрилансера за 500 руб. Логотип можно сделать в какой-нибудь программе или просто написать название фирмы красивым шрифтом.

    Дескриптор

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

    Примеры дескрипторов для лендинга:

    «Интернет-магазин автозапчастей в Москве. Доставка по России»

    «Оформление виз и мультивиз в Европу за 15 минут»

    На этом примере дескрипт «обучение плаванию»:

    Телефон

    Не нужно ставить на лендинге мобильный номер, это не вызывает доверия. У номера телефона должен быть соответствующий код города, чтобы человек сразу понимал, где вы находитесь и куда он звонит. Если вы работаете по всей России, то нужен номер 8-800, который даёт возможность клиентам звонить бесплатно. В этом случае напишите под номером: “Звонок по России бесплатно”.

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

    Кнопка «Заказать звонок»

    Под номером телефона можно поставить кнопку “Заказать обратный звонок”, но практика показывает, что звонок заказывают очень редко. Кроме того, нужно учитывать, будет ли кнопка вписываться в дизайн и не будет ли отвлекать внимание. Если, к примеру, у вас на странице есть форма заявки со своей кнопкой и цель вашего лендинга в получении заявки, то лишняя кнопка в шапке будет отвлекать посетителя от совершения целевого действия.

    Желательно текст кнопки писать в повелительном наклонении: “Закажите”. Вообще все призывы на лендинге должны быть в повелительном наклонении: закажите, узнайте, посмотрите, позвоните.

    Адрес компании

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

    Теперь переходим к основному содержимому страницы.

    Заголовок и подзаголовок

    Здесь должно быть сформулировано УТП . Помимо УТП должна быть показана конкретная деятельность. Если в дескрипте вы говорите обобщенно, то в заголовке и подзаголовке нужно описать всё конкретно.

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

    Помните: то, что вы помещаете в заголовке, даёт 50% успеха вашего лендинга. Вторые 50% дают дизайн и структура.

    Второй и третий заголовок на лендинге - это закрытие возражений в голове клиента. Заголовки - это первое, что читает посетитель. Поэтому, делая два или три заголовка, мы сразу же закрываем все возражения человека, закрываем все вопросы, которые его волнуют при заходе на наш лендинг.

    Примеры заголовков на лендинге:

    Как придумать хороший заголовок?

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

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

    Прежде, чем написать заголовок вашего лендинга, вы должны понять, что важно и ценно для клиентов, чего они хотят, что для них плохо и чего они не хотят.

    Дескриптор – один из важнейших инструментов, благодаря которому люди, приходящие на ваш сайт, понимают, куда именно попали. И даже если он будет слишком большим, это не является ошибкой. Дескриптор можно сделать отдельно для некоторых страниц или разделов.
    Для справки: дескриптор – это описание. Описание услуг, оказываемых вами, описание реализуемых товаров, а также описание самой компании.

    Как составить продающих дескриптор?

    Первый пример

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

    В данном случае дескриптор будет звучать так: «Интернет-магазин качественной сантехники и аксессуаров для личных и общественных санузлов с доставкой по МО и Москве».

    Есть конкретные вопросы?
    Оставьте заявку и расскажите о проблеме!

    Если вам требуется улучшение продающих качеств, создание или продвижение сайта, контент-маркетинг, аудит или оптимизация, свяжитесь с нами через форму он-лайн заявки,
    по телефону - (495) 661-4026 или по е-мейл - to(at)gonka(dot)ru .

    Второй пример

    Вы продаете, скажем, скважинные насосы. Об этом нам посетителю говорит тайтл (служебный заголовок страницы). Но каждый ли посетитель смотрит на ваш тайтл? Конечно, нет. Его увидит, пожалуй, только опытный сеошник, да и то по привычке. Плюс во многих современных браузерах тайтл вовсе незаметен.

    Воспользоваться навигацией – выход, но не очень удобный, особенно для неопытных пользователей ПК. Если в навигационной системе вашего сайта много пунктов, заблудиться будет не так сложно. Да и вряд ли навигация расскажет посетителю, будет ли доставлен тот или иной товар по вашему адресу, а также можно ли его купить в розницу или только оптом.

    Выход: объединить товары по таким признакам, как доставка, способ реализации и регион. Тогда посетитель быстро определит условия покупки и возможность доставки. Все это он увидит прямо под вашим логотипом.

    Третий пример

    Рассмотрим сайт, предлагающий услуги, например, по оптимизации налогов. Естественно, сама формулировка «оптимизация налогов» будет недостаточна. Непонятно, где проводится оптимизация, каких налогов, как и для кого. В данном случае дополнительные данные обязательны. Не забудьте подчеркнуть ссылки.

    И напоследок, что важно знать о дескрипторе?

    Дескриптор – это обобщенное описание компании, ее товаров и услуг.
    Дескриптор должен быть:

    • Четким, лаконичным, но не слишком коротким.
    • Отвечающим на такие вопросы, как «для кого», «где», «чем занимаетесь» и пр.
    • Открывающимся на каждой странице ресурса.
    • Включающим мощное и громкое конкурентное преимущество, чтобы купили/заказали именно у вас.

    Это стандартный набор эффективного дескриптора. Но вы можете включить у него что-то свое, что выделит вашу компанию на рынке. Даешь фантазию и креативность!

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

    Дескрипторы, написанные нашими специалистыми, улучшают продающие качества сайтов.

    template

    inline Type* MP::operator->() const

    Дескрипторы в C++

    Итак, после небольшого подогрева умные указатели превратились в ведущие. Теперь в нашем вареве появляется еще один ингредиент - дескрипторы (handles) C++. Не путайте этот термин с дескрипторами, используемыми в операционных системах Macintosh и Windows. Некоторое сходство существует, но идиома дескрипторов C++ имеет собственную уникальную семантику и набор правил.

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

    MP)) {} // См. Ниже

    H(MP& mp)

    MP& operator->() const { return ptr; }

    Безаргументный конструктор Н создает новый ведущий указатель. Этот ведущий указатель, в свою очередь, создает указываемый объект. Существует второй конструктор, который получает ведущий указатель и инициализирует им переменнуюptr . Конструктор копий и оператор= по умолчанию годятся, поскольку любому ведущему указателю может соответствовать несколько дескрипторов. Работа оператора -> основана на рекурсивном алгоритме, используемом компилятором: оператор -> дескриптора возвращает ведущий указатель; затем оператор -> ведущего указателя возвращает указательType* который является одним из базовых типов компилятора.

    Приведенное решение не назовешь изящным - вложенные шаблоны порождают путаницу, к тому же совершенно неясно, когда и как удалять ведущие указатели. Кроме того, следует ли разрешить пользователю напрямую создавать и уничтожать ведущие указатели или же заключить их внутри дескрипторов так, как мы заключили указываемые объекты внутри ведущих указателей? Неужели мы трудились над решением этих проблем для указываемых объектов лишь затем, чтобы столкнуться с ними снова для ведущих указателей? Терпение - в свое время мы найдем ответ на эти и многие другие вопросы.

    Что же получается?

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

    Подсчет объектов

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

    class CountedStuff { private:

    static int current; public:

    CountedStuff() { current++; } CountedStuff(const CuntedStuff&) { current++; } CountedStuff& operator=(const CountedStuff&)

    {} // Не менять счетчик для присваивания

    ~CountedStuff() { current--; }

    С этим примером еще можно повозиться и улучшить его, но как бы вы ни старались, придется изменять код целевого класса - хотя бы для того, чтобы заставить его наследовать от нашего класса. Теперь предположим, что указываемый объект входит в коммерческую библиотеку. Обидно, да? Любые изменения нежелательны, а скорее всего, просто невозможны. Но вот на сцену выходит класс ведущего указателя.

    template class CMP {

    static int current; Type* ptr;

    CMP() : ptr(new Type) { current++; }

    CMP(const CMP& cmp) : ptr(new Type(*(mp.t))) { current++; } CMP& operator=(const CMP& cmp)

    if (this != &cmp) { delete ptr;

    ptr = new Type(*(cmp.ptr));

    ~CMP() { delete ptr; current--; }

    Type* operator->() const { return ptr; } Static int Current() { return current; }

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

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

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

    Указатели только для чтения

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

    Достаточно сделать операторную функцию operator->() константной функцией класса.

    ROMP& operator=(const ROMP&); const Type* operator->() const;

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

    Указатели для чтения/записи

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

    Это было бы легко сделать при наличии двух перегруженных версий оператора -> , одна из которых возвращаетFoo* , а другая -const Foo* . К сожалению, разные возвращаемые типы не обеспечивают уникальности сигнатур, поэтому при попытке объявить два оператора -> компилятор от души посмеется. Программисту придется заранее вызвать функцию, которая осуществляет переход от одного представления к другому.

    Одно из возможных применений этой схемы - распределенные объекты. Если копии объекта не обновляются локальными клиентами, они могут быть разбросаны по всей сети. Совсем другое дело - координация обновлений нескольких экземпляров. Можно установить правило, согласно которому допускается существование любого количества копий только для чтения, но лишь одна главная копия. Чтобы обновить объект, необходимо предварительно получить главную копию у ее текущего владельца. Конечно, приходится учитывать многие нюансы (в частности, процедуру смены владельца главной копии), однако правильное применение ведущих указателей позволяет реализовать эту концепцию на удивление просто и незаметно для клиентов.

    6 ответов

    Простыми словами при открытии файла операционная система создает запись для представления этого файла и сохраняет информацию об этом открывшемся файле. Итак, если в вашей ОС открыто 100 файлов, то в ОС будет находиться 100 записей (где-то в ядре). Эти записи представлены целыми числами типа (... 100, 101, 102....). Этот номер записи является файловым дескриптором. Таким образом, это просто целое число, которое уникально представляет собой открытый файл в операционной системе. Если ваш процесс откроет 10 файлов, ваша таблица процессов будет содержать 10 записей для дескрипторов файлов.

    Аналогично, когда вы открываете сетевой сокет, он также представляется целым числом и называется дескриптором Socket. Надеюсь, вы понимаете.

    Дескриптор файла - это непрозрачный дескриптор, который используется в интерфейсе между пространством пользователя и ядра для идентификации ресурсов файла/сокета. Поэтому, когда вы используете open() или socket() (системные вызовы для интерфейса с ядром), вам предоставляется дескриптор файла, который является целым числом (это фактически индекс в структуре процессов u, но это не важно). Поэтому, если вы хотите напрямую взаимодействовать с ядром, используя системные вызовы read() , write() , close() и т.д. Дескриптор, который вы используете, является файловым дескриптором.

    На системных вызовах имеется слой абстракции, который является интерфейсом stdio . Это обеспечивает больше функциональности/функций, чем это делают основные системные вызовы. Для этого интерфейса непрозрачным дескриптором вы получаете FILE* , который возвращается вызовом fopen() . Существует много функций, которые используют интерфейс stdio fprintf() , fscanf() , fclose() , которые помогут вам сделать вашу жизнь проще. В C, stdin , stdout и stderr находятся FILE* , которые в UNIX соответственно сопоставляются файловым дескрипторам 0 , 1 и 2 .

    Услышьте его от Лошадиного устья: APUE (Ричард Стивенс).
    К ядру все открытые файлы упоминаются файловыми дескрипторами. Дескриптор файла является неотрицательным числом.
    Когда мы открываем существующий файл или создаем новый файл, ядро ​​возвращает дескриптор файла в процесс. Ядро поддерживает таблицу всех открытых дескрипторов файлов, которые используются. Выделение файловых дескрипторов, как правило, является последовательным, и они привязаны к файлу как следующий свободный дескриптор файла из пула свободных файловых дескрипторов. Когда мы закрываем файл, дескриптор файла освобождается и доступен для дальнейшего выделения.
    См. Это изображение для получения дополнительной информации:

    Когда мы хотим прочитать или записать файл, мы идентифицируем файл с файловым дескриптором, который был вызван вызовом функции open() или create() , и используйте его как аргумент для read() или write() .
    По общему мнению, оболочки UNIX связывают файловый дескриптор 0 с стандартным входом процесса, дескриптор файла 1 с стандартным выходом и дескриптор файла 2 с Стандартная ошибка .
    Дескриптор файла варьируется от 0 до OPEN_MAX.
    Для получения дополнительной информации перейдите к третьей главе книги APUE.

    В дополнение к другим ответам, unix рассматривает все как файловую систему. Ваша клавиатура - это файл, который читается только с точки зрения ядра. Экран - это файл только для записи. Аналогичным образом, папки, устройства ввода-вывода и т.д. Также считаются файлами. Всякий раз, когда файл открывается, скажите, когда драйверы устройства [для файлов устройства] запрашивают open() или процесс открывает файл пользователя, ядро ​​выделяет файловый дескриптор, целое число, которое указывает доступ к этому файлу, такое, что оно доступно только для чтения, писать только и т.д. [для справки: https://en.wikipedia.org/wiki/Everything_is_a_file ]

    Больше о дескрипторах файлов

      Дескрипторы файлов (FD) - неотрицательные целые числа (0,1,2,...), которые связаны с открытым файлом.

      0,1,2 являются стандартными FD, которые соответствуют STDIN_FILENO, STDOUT_FILENO и STDERR_FILENO. (определяется в unistd.h) открывается по умолчанию для имени оболочки при запуске программы.

      FDs выделены в последовательном порядке, означает наименьшее возможное нераспределенное целочисленное значение.

      FD для конкретного процесса можно увидеть в /proc/ $pid/fd (в системах на базе Unix)

      В любой операционной системе работают процессы (p), например p1, p2, p3 и т.д. Каждый процесс обычно делает постоянное использование файлов.

      Каждый процесс состоит из дерева процессов (или таблицы процессов, в другой фразировке).

      Обычно операционные системы представляют каждый файл в каждом процессе по номеру (то есть в каждом дереве/таблице процессов).

      Первым файлом, используемым в этом процессе, является файл0, второй - файл1, третий - файл2 и т.д.

      Любое такое число является файловым дескриптором.

      Дескрипторы файлов обычно являются целыми числами (0, 1, 2, а не 0,5, 1,5, 2,5).

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

      Аналогично, когда вы открываете сетевой сокет, он имеет дескриптор сокета.

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

      Дескрипторы файлов могут быть глобальными (процесс A начинается с 0, и заканчивается в 1, процесс B начинается с 2, а заканчивается на 3) и т.д., но, насколько я знаю, обычно в современных операционных системы, дескрипторы файлов не являются глобальными и на самом деле зависят от процесса (процесс A начинается с 0, а заканчивается на 5, а процесс B начинается с 0, а заканчивается на 10).