Многие из системных вызовов для работы с обычными файлами также используются и для работы с терминальными специальными файлами. Для доступа к терминалам можно использовать следующие системные вызовы:
open(2) Как и регулярные файлы, специальные байт-ориентированные файлы открываются этим системным вызовом. По соглашению, имена всех терминальный файлов находятся в директории /dev или одной из поддиректорий /dev. В Solaris они размещены в /dev/term/XX (физические терминалы) и /dev/pty/XX (псевдотерминалы), где XX — двузначное десятичное число. Кроме того, управляющий терминал вашей сессии доступен вашей программе как /dev/tty.
ioctl(2) Этот системный вызов используется передачи устройствам команд, которые не могут быть сведены к чтению или записи. У терминалов, ioctl(2) используется как для конфигурации физического порта ввода/вывода, так и для управления функциями терминальной дисциплины. Соответствующие команды ioctl(2) не стандартизованы, различаются в разных Unix-системах и не будут обсуждаться в этом курсе. Параметры ioctl(2) для работы с терминалами в Solaris, описаны на странице руководства termio(7I).
termios(3С) Эта страница руководства содержит набор функций, предоставляющих стандартизованный интерфейс для управления терминальными устройствами. Это более предпочтительный интерфейс, чем ioctl(2), потому что он соответствует стандарту POSIX и обеспечивает разработку переносимых программ. В этом разделе будут обсуждаться, главным образом, функции termios(3C).
isatty(3F) Этот системный вызов определяет, связан ли файловый дескриптор с терминальным устройством или с файлом какого-то другого типа. Если isatty(3F) возвращает ненулевое значение, файловый дескриптор поддерживает терминальные ioctl(2) и функции termios(3C).
read(2) Используется для чтения данных из специального терминального файла. read(2) возвращает количество прочитанных байтов, которое может быть меньше запрошенного. По умолчанию, терминал ожидает ввода полной строки, оканчивающейся символом '\n' (ASCII NL) и считывает данные по строкам. Однако не обязательно читать всю строку за один раз. Если буфер read(2) меньше длины текущей строки, будет считано только начало строки.
Чтение с терминала разрушает данные, то есть прочитанные данные не могут быть прочитаны опять. Поэтому если два процесса одновременно читают с терминала, это может приводить к потере данных. Для управления доступом к чтению с терминала используются сигналы управления заданиями и функция tcsetpgrp(3C), которые рассматриваются далее в этом разделе
write(2) Системный вызов write(2) используется для записи символов в специальный байт-ориентированный файл.
poll(2) и select(3C). Эти вызовы часто используются для мультиплексирования ввода-вывода, если процессу необходимо одновременно работать с терминалом и другими устройствами или псевдоустройствами, работа с которыми может привести к блокировке.
libcurses(3LIB) библиотека для генерации кодов расширения терминала в зависимости от его типа.