[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Программный интерфейс ввода/вывода

Многие из системных вызовов для работы с обычными файлами также
используются и для работы с терминальными специальными файлами. Для
доступа к терминалам можно использовать следующие системные вызовы:
open(2)   Как   и    обычные   дисковые   файлы,   специальные   байт-
          ориентированные файлы открываются этим системным вызовом. По
          соглашению, имена  всех этих  специальных файлов находятся в
          директории /dev  или одной  из поддиректорий  /dev. Примером
          специального    байт-ориентированного     файла     является
          терминальный файл,  соответствующий  порту  ввода/вывода,  к
          которому подключен  ваш терминал.  Его имя /dev/term/xx (или
          /dev/ttyxx,  в   зависимости  от  системы),  где  xx  обычно
          является комбинацией  цифр.  Кроме  того,  ваш  терминальный
          специальный файл доступен вашей программе как /dev/tty.
ioctl(2)  Этот системный  вызов используется  для  конфигурации  порта
          ввода/вывода, связанного  с терминальным специальным файлом.
          Например, он  может управлять  пред- и постобработкой данных
          при их  записи на  терминал или считывании с него. Параметры
          ioctl(2) и  значения, которые они могут принимать, описаны в
          файле <termio.h>.
termios(2) Эта   страница    руководства   содержит   набор   функций,
          предоставляющих   интерфейс   для   управления   асинхронным
          коммуникационным   портом.    Это   более   предпочтительный
          интерфейс,  чем   ioctl(2),  потому   что  он  соответствует
          стандарту  POSIX.  Вторая  секция  этого  раздела  посвящена
          функциям, описанным  на этой странице руководства. Параметры
          этих функций и их возможные значения описаны в <termios.h>.
read(2)   После того,  как open(2)  выдал  дескриптор  файла,  read(2)
          используется для чтения данных из специального терминального
          файла. read(2)  возвращает  количество  прочитанных  байтов,
          которое может быть меньше запрошенного. Обычно чтение строки
          с  терминала  завершается  символом  перевода  строки  (NL).
          Независимо от  того, сколько  символов было запрошено, будет
          считана строка.  Однако не  обязательно читать всю строку за
          один раз.  Можно запросить  любое число  символов. Например,
          если line является массивом из десяти или более символов:

          read(0, line,  10) возвратит 4, если на терминале напечатать
          abc<RETURN>
          read(0, line, 2) возвратит 2, если на терминале было набрано
          def<RETURN>
          read(0, line, 3) возвратит 2 (прочитает остаток строки)

          Чтение с  терминала разрушает  данные, то  есть  прочитанные
          данные  не   могут  быть   прочитаны  опять.   Для   каждого
          специального файла  должна быть  определена операция чтения.
          Например, бессмысленно  читать данные из специального файла,
          ассоциированного с  принтером.  Попытка  открыть  принтерный
          специальный файл для чтения завершится неуспехом.
write(2)  Системный вызов  write(2) используется для записи символов в
          специальный байт-ориентированный файл.
close(2)  Системный  вызов   close(2)  закрывает   дескриптор   файла,
          связанный со специальным файлом.
                  ПРОГРАММНЫЙ ИНТЕРФЕЙС ВВОДА/ВЫВОДА
.    open(2)
    - /dev/term/xx

    - /dev/tty

    - возвращает дескриптор файла

.    ioctl(2)
    - /usr/include/termio.h

.    termios(2)
    - /usr/include/termios.h

.   read(2)

.    write(2)
.    close(2)