modem_read()

Считать требуемое количество байт из файлового дескриптора

Прототип:

#include <sys/modem.h>
int modem_read( int fd,
char *buf,
int bufsize,
int quiet,
int timeout,
int flags,
int (*cancel)( void ) );

Аргументы:

fd
Файловый дескриптор устройства, из которого необходимо прочитать данные; смотрите modem_open().
buf
Указатель на буфер, в который будут сохранены данные.
bufsize
Размер буфера в байтах.
quiet
Максимальное время ожидания (в десятых долях секунды) поступления данных при получении хотя бы одного символа.
timeout
Максимальное время ожидания (в десятых долях секунды) любого поступления данных.
flags
Флаги для фильтрования и сопоставления полученных символов; комбинация следующих флагов:
MODEM_ALLOWCASE
сохранить регистр входящих символов. Без этого флага все буквы будут отображаться с нижним регистром.
MODEM_ALLOWCTRL
разрешить управляющие символы. Без этого флага, управляющие символы будут отбрасываются.
MODEM_ALLOW8BIT
разрешить сохранение старшего бита получаемых символов. Без данного флага старший бит будет приравнен нулю во всех пришедших символах.
MODEM_LASTLINE
отбросить все пришедшие ранее символы при получении символа новой строки, за которым были получены другие символы. Без данного флага может быть возвращён набор символов с множеством строк, заканчивающихся символом новой строки. Если сценарий автоматического входа может быть представлен произвольным текстовым интерфейсом до аутентификации, можно использовать данный флаг для сброса всех строк, кроме строк входа в систему, тем самым уменьшая вероятность ложных срабатываний.
cancel
NULL, или указатель на функцию-обработчик, которая должна сработать при истечении времени молчания quiet во время ожидания дополнительного ввода.

Библиотека:

libc

Описание:

Функция modem_read() читает до bufsize байт из устройства, связанного с файловым дескриптором fd, прочитанные данные помещаются в буфер, указанный в buf.

Если данные отсутствуют, без timeout modem_read() вернёт -1.

Если был получен хотя бы один символ, modem_read() закончит чтение после того, как поток символов, поступающих в устройство, остановится как минимум на quiet времени. Число символов, сохранённых в buf, будет возвращено данной функцией.

Если задана функция cancel, данная функция будет срабатывать раз в период времени quiet, пока ожидается ввод. Если данная функция возвращает ненулевое значение, modem_read() вернёт -1 немедленно и установить для errno значение ETIMEDOUT. Вы можете использовать функцию cancel в графическом номеронабирателе, который должен поддерживать кнопку отмены для остановки скрипта (смотрите modem_script()).

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EAGAIN
Установлен флаг O_NONBLOCK при открытии файлового дескриптора fd, процесс заблокирован при попытке выполнить операцию.
EBADF
Аргумент fd некорректен или файл, связанный с данным дескриптором, не открыт.
EINTR
Вызов readcond() был прерван процессом из-за получения сигнала.
EIO
Процесс в настоящее время не может считывать данные из fd.
ENOSYS
Функция не поддерживается для данного fd.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Смотри ниже
В потоке
Смотри ниже

Предостережения:

Безопасность использования modem_read() внутри обработчика сигнала или потока зависит от того, какие операции проводит установленный обработчик cancel.

Тематические ссылки:

modem_open(), modem_script(), modem_write()




Предыдущий раздел: Описание API системной библиотеки