modem_write()

Записать строку в устройство

Прототип:

#include <sys/modem.h>
int modem_write( int fd,
char *str );

Аргументы:

fd
Файловый дескриптор устройства, в которое необходимо записать данные; смотрите modem_open().
str
Строка, которую необходимо записать.

Библиотека:

libc

Описание:

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

Если символ \ появляется в строке str, следующий символ интерпретируется функцией modem_write(), и вместо записи обоих символов, они интерпретируются как специальная escape-последовательность, которая вызывает следующие действия:

Последовательность Описание
\r Вывод символа перевода каретки.
\n Вывод символа новой строки.
\xhh Вывод одиночного символа, который описан с помощью шестнадцатеричного значения hh.
\B Отправить 500-миллисекундную паузу на линию с помощью tcsendbreak().
\D Отсоединить канал на 1 секунду, используя tcdropline().
\Phh Пауза на hh 1/10 секунды, где hh это символы двух шестнадцатиричных цифр.

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

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

Коды ошибок:

EAGAIN
Если флаг O_NONBLOCK установлен при открытии файлового дескриптора fd, процесс будет заблокирован во время операции записи.
EBADF
Файловый дескриптор fd является некорректным файловым дескриптором для записи.
EINTR
Операция записи была прервана сигналом, и либо данные не переданы, либо менеджер ресурсов, ответственный за файл, не сообщает о частичной передаче.
EIO
Произошла физическая ошибка записи. Точная причина зависит от устройства.
EPIPE
Предпринята попытка записи в канал (или FIFO) который не открыт для чтения другим процессом. Сигнал SIGPIPE также отправляется процессу.

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

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

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

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

modem_open(), modem_read(), modem_script()




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