Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (36 – Неблокирующий ввод-вывод, часть 3)

предыдущая часть ««»» следующая часть

При выполнении функций sysread () и syswrite (), как всегда, могут встретиться и другие ошибки ввода-вывода. Константа EWOULDBLOCK может быть импортирована из модуля Errno.

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

Создание неблокирующих дескрипторов: функциональный интерфейс

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

$result = sysopen (FILE HANDLE, $filename, $mode[,$perms])

Вызов функции sysopen (), которая была представлена ранее, позволяет отметить дескриптор файла как неблокирующий при его открытии. Общая схема состоит в добавлении флажка nonblock к флажкам, передаваемым в параметре $mode. Например, чтобы открыть устройство /dev/tape0 для неблокирующей записи, можно применить вызов:

use Fcntl;

sysopen (ТАРЕ,’/dev/tape0’,0_WR0NLY10_N0NBL0CK) ;

Функция sysopen () работает только с локальными файлами и не может применяться для открытия каналов или сокетов. Поэтому создание неблокирующих дескриптором файлов таким способом обычно применяется только при работе с медленными локаль­ными устройствами, такими как лентопротяжки.

2014-07-23 13:15:07

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония