Навигация
Главная
Поиск
Форум
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
Реклама
Сейчас на сайте
Гостей: 11
На сайте нет зарегистрированных пользователей

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

Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Изменения контуров и сортировка в двумерном массиве чисел на Turbo Pasca...
База данных студентов на 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 Комментариев · 3105 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Алгоритмы шифрова...
DCMintry
Java 2. Наиболее ...
AdBlaster v2.5 - ...
Counter [Исходник...
Delphi 2005 Учимс...
Игра "Астероиды" ...
Dynamic Titles дл...
Работа с картотеками
C++ для начинающих
Delphi. Учимся на...
VksButton
UmEdit
ShadelLabel
PrevInst
Программа для рис...
Converter AMR<->W...
Binary2XMLDemo (Р...
Microsoft Press -...
Использование Lis...

Топ загрузок
Приложение Клие... 100801
Delphi 7 Enterp... 98065
Converter AMR<-... 20304
GPSS World Stud... 17069
Borland C++Buil... 14262
Borland Delphi ... 10389
Turbo Pascal fo... 7399
Калькулятор [Ис... 6094
Visual Studio 2... 5242
Microsoft SQL S... 3677
Случайные статьи
Создание интернет ...
Фальшивый номер зв...
Часто возникают ди...
Использование бито...
Демонстрация неско...
Кнопка с рисунком
Приведение типа
Комбинация клавиш ...
БЛОКИ, ОРИЕНТИРОВА...
Каковы значения ад...
В свою очередь эта...
Процедура GetModeR...
Гостевая книга на PHP
String expression ...
Область построения...
Особенности разраб...
Схемы, определяющи...
HR. Старайтесь исп...
Получение объектов...
Логическое выражение
Язык С: перечислим...
Как выбрать самый ...
Рекомендации по ор...
Функции ввода-выво...
Водородная энерге...
Статистика



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


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