Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,364
новичок: eqvufy
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы класса персональных компьютеров на GPSS + Отчет + Б...
База данных склада на Delphi + Схема БД
Обратное размещение элементов ЭВС на Delphi + Пояснительная записка

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



Также вам может показаться, что такая тема как http://vs-s.kz/uslugi/obsluzhivanie-1s-i-nalogovyix-programm.html никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт vs-s.kz. Тема установка 1с там представлена весьма широко. На том сайте можно узнать много интересного на тему установка 1с. Что означает вообще тема установка 1с, где найти установка 1с - про это написано на сайте vs-s.kz. Это очень важная для многих людей тема - установка 1с. Спасибо сайту vs-s.kz за информацию на тему установка 1с.


При вызове функции read ядро получает дескриптор файла для обращения к структуре file, через которую производит доступ к объекту vnode файла (являющемуся частью snode устройства). Ядро выполняет некоторую проверку, например, на открытие файла только «на чтение». Затем вызывается операция V0P_READ объекта vnode, что в конечном итоге приводит к вызову spec_read().


Функция spec_read() проверяет тип объекта vnode и находит, что речь идет о символьном устройстве. Тогда она просматривает таблицу cdevsw[], взяв в качестве индекса старший номер устройства (хранимый в поле v_rdev). Если устройство относится к STREAMS, для выполнения операции вызывается strread(). Для символьных устройств запускается процедура d_read() соответствующего устройства, которой передается структура uio, содержащая все параметры операции чтения, такие как адрес приемника в прикладном адресном пространстве и число считываемых байтов.
Так как операция d_read() является синхронной, она может заблокировать вызвавший ее процесс, если данные не оказались получены сразу же. После получения данных обработчик прерываний будит процесс для копирования байтов в его адресное пространство. Для этой цели d_read() вызывает функцию ядра uiomoveQ. Эта функция проверяет наличие прав пользователя на запись данных в указываемое место. Если этого не сделать, то пользователь по неосторожности или, наоборот, злоумышленно может перезаписать текстовый сегмент или даже адресное пространство ядра. После завершения передачи данных ядро возвращает количество считанных байтов.
Системный вызов poll
Системный вызов poll позволяет объединять ввод-вывод с набора дескрипторов. Представьте серверную программу, открывающую несколько сетевых соединений, каждое из которых представлено файлом устройства. Это требует использования уникального дескриптора для каждого соединения. Если программе нужно получить входящее сообщение от конкретного соединения, вызывается операция чтения, где в качестве параметра указывается соответствующий дескриптор. Системный вызов read заблокирует сервер до тех пор, пока не получит ожидаемые данные, после чего возобновит работу и передаст данные программе.
Разберем другой вариант развития примера: сервер теперь будет ожидать сообщение, поступившее с любого соединения. В этом случае вызов read не будет эффективен, так как чтение одного дескриптора может привести к блокировке программы, несмотря на то, что на других соединениях имеются данные. В такой ситуации серверу необходимо применять системный вызов poll, позволяющий одновременно ожидать событий в заданном диапазоне дескрипторов и завершать выполнение после наступления такого события.
Для каждого дескриптора поле events ссылается на события, интересные для вызывающего процесса. Параметр revents относится к событиям, которые реально имели место. Обе переменные представляют собой битовые маски.


Типы предопределенных событий включают в себя P0LLIN (данные можно прочесть без блокировки), P0LL0UT (данные могут быть записаны без блокировки), P0LLERR (в устройстве или потоке произошла ошибка), P0LLHUP (разрыв связи в потоке — hang-up). Следовательно, в стандартном варианте вызов poll производит проверку готовности устройства на ввод-вывод или получает состояние ошибки.
Опубликовал katy June 23 2015 06:57:14 · 0 Комментариев · 2579 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
C++ : библиотека ...
C++ Builder в за...
AlignEdit
Иллюстрированный ...
Visual Studio 200...
Crypt32
PHP 5. Полное рук...
PHP/MySQL для нач...
RSS Feeds
ЯЗЫК ПРОГРАММИРОВ...
Report
Программирование ...
NetGraph [Исходни...
Сапёр
TmxOutlookBarPro
Определние размер...
FilesInfo
Секреты программи...
Работа с базами д...
C# 2005 и платфор...

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97832
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14191
Borland Delphi ... 10290
Turbo Pascal fo... 7373
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Цель — проиллюстри...
Процедура SetLineS...
Эротическое белье ...
Выравнивание текст...
Пароль на страницу
Простейшие комбина...
Язык программирова...
8.5. Фиксация ошибок
Приведем упрощенны...
Создание манипулят...
Модуль XHTML Modul...
Обработка страничн...
Работа в Windows 10
Если поискать в Ин...
Too many open files
Чтобы исключить уг...
Анонимность пользо...
Организация информ...
Алгоритм синхрониз...
ОПИСАНИЕ ПРЕДМЕТНО...
dll) поддерживает ...
13.6. Задачи
Не оценивайте эксп...
Поиск значений
Ordinal expression...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?