Jump to content

Терминальный интерфейс Unix седьмой редакции

Терминальный интерфейс седьмого издания Unix — это обобщенная абстракция, включающая в себя как интерфейс прикладного программирования для программ, так и набор поведенческих ожиданий для пользователей терминала, исторически доступного в седьмом издании Unix . Он был в значительной степени заменен терминальным интерфейсом POSIX .

Концепции и обзор

[ редактировать ]

Терминальный интерфейс, предоставляемый седьмым изданием Unix и UNIX/32V , а также представленный BSD версии 4 как старый драйвер терминала , был простым и в основном ориентирован на телетайпы в качестве терминалов. Ввод вводился построчно, причем драйвер терминала в операционной системе (а не в самих терминалах) обеспечивал простые возможности редактирования строк. Ядро поддерживало буфер, в котором происходило редактирование. Приложения, читающие входные данные терминала, будут получать содержимое буфера только тогда, когда return На терминале была нажата клавиша для завершения редактирования строки. @ Ключ, отправленный с терминала в систему, сотрет («уничтожит») все текущее содержимое буфера редактирования и обычно отображается как ' @', за которым следует последовательность новой строки, чтобы переместить позицию печати на новую пустую строку. # Ключ, отправленный с терминала в систему, удалит последний символ из конца буфера редактирования и обычно отображается как ' #', который пользователи должны будут распознать как обозначающий «затирание» предыдущего символа (телетайпы физически не способны стирать символы после того, как они были напечатаны на бумаге). [1] [2] [3] [4] [5]

С точки зрения программирования, терминальное устройство имело скорости передачи и приема , символы «стирания» и «уничтожения» (которые, как объяснялось, выполняли редактирование строки), символы «прерывания» и «выхода» (генерирующие сигналы для всех процессы, для которых терминал был управляющим терминалом), символы «старт» и «стоп» (используемые для программного управления потоком данных ), символ «конца файла» (действующий как возврат каретки, за исключением того, что он удаляется из буфера read() системный вызов и, следовательно, потенциально вызывающий возврат результата нулевой длины) и различные флаги режима , определяющие, было ли локальное эхо эмулировано драйвером терминала ядра, было ли включено управление потоком данных через модем, длины различных задержек вывода, отображение возврата каретки символ и три режима ввода. [6]

Режимы ввода

[ редактировать ]

В седьмом издании Unix было три режима ввода для терминалов:

линейный режим (также называемый «режим приготовления»)
В линейном режиме дисциплина линии выполняет все функции редактирования строки, распознает управляющие символы «прерывание» и «выход» и преобразует их в сигналы, отправляемые процессам. Прикладные программы, читающие с терминала, получают целые строки после завершения редактирования строки пользователем, нажав Enter. [2] [7]
режим cbreak
Режим cbreak — это один из двух режимов посимвольной обработки. ( Стивен Р. Борн в шутку назвал его ( Bourne 1983 , стр. 288) «полуготовым» и, следовательно, «редким» режимом.) Дисциплина линии не выполняет редактирование строки, а управляющие последовательности для функций редактирования строки обрабатываются как обычный ввод символов. Прикладные программы, считывающие с терминала, получают символы немедленно, как только они становятся доступными во входной очереди для чтения. Однако управляющие символы «прерывание» и «выход», а также символы управления потоком данных модема по-прежнему обрабатываются особым образом и удаляются из входного потока. [8] [9]
необработанный режим
необработанный режим — это другой из двух посимвольных режимов. Дисциплина строки не выполняет редактирование строки, а последовательности управления как для функций редактирования строки, так и для различных специальных символов («прерывание», «выход» и управление потоком) обрабатываются как обычный ввод символов. Прикладные программы, считывающие с терминала, получают символы немедленно и получают весь поток символов без изменений, так же, как он поступил от самого терминального устройства. [10] [8] [9]

В терминальном интерфейсе POSIX эти режимы были заменены системой, состоящей всего из двух режимов ввода: канонического и неканонического . Обработка специальных символов, генерирующих сигналы, в интерфейсе терминала POSIX не зависит от режима ввода и контролируется отдельно.

Управляющие терминалы

[ редактировать ]

В седьмой редакции Unix не было управления заданиями терминалов , и группа процессов считалась не такой, как сейчас.

Каждый процесс в системе имел либо единственный управляющий терминал , либо вообще не имел управляющего терминала. Процесс наследует управляющий терминал от родителя. Управляющий терминал был получен, когда процесс без управляющего терминала open()Это файл терминального устройства, который еще не является управляющим терминалом для какого-либо другого процесса. Все процессы, имевшие один и тот же управляющий терминал, входили в одну группу процессов . [11]

Интерфейс прикладного программирования

[ редактировать ]

Программный интерфейс для запроса и изменения всех этих режимов и управляющих символов был ioctl() системный вызов . (Это заменило stty() и gtty() системные вызовы шестого издания Unix.) [12] [13] Хотя символы «стереть» и «уничтожить» можно было изменить по умолчанию, # и @, в течение многих лет после инерции разработки седьмого издания означала, что они были предустановленными значениями по умолчанию в драйверах терминальных устройств, а во многих системах Unix, которые изменяли настройки терминального устройства только как часть процесса входа в систему, в сценариях входа в систему, которые выполнялись после пользователь ввел имя пользователя и пароль, любые ошибки при запросе логина и пароля необходимо было исправлять, используя исторические ключевые символы редактирования, унаследованные от терминалов телетайпа. [4]

Символические константы, значения которых были фиксированы и определены, а также определения структур данных программного интерфейса были определены в файле sgtty.h системный заголовок. [8]

ioctl() операции

[ редактировать ]

The ioctl() операции были следующие:

ioctl() операции для терминальных устройств
символ структура, на которую указывает третий аргумент описание
TIOGETP sgttyb запрос параметров терминала в структуру данных
TIOSETP sgttyb установить параметры терминала из структуры данных, сначала очищая весь ожидающий вывод и очищая входные данные в очереди
TIOSETN sgttyb установить параметры терминала из структуры данных, не дожидаясь и не сливая
TIOCEXCL никто включить режим «эксклюзивного использования»
TIOCNXCL никто отключить режим «эксклюзивного использования»
TIOCHPCL никто включить режим «зависание при последнем закрытии»
TIOCFLUSH никто очистить все очереди вывода и ввода
TIOGETC tchars запрос параметров терминала в структуру данных
TIOSETC tchars установить параметры терминала из структуры данных

The sgttyb структура данных

[ редактировать ]

Одной из структур данных, используемых терминальными системными вызовами, является sgttyb структура, определение которой на языке программирования C выглядит следующим образом: [14]

struct sgttyb {
    char sg_ispeed ;    // Input speed
    char sg_ospeed ;    // Output speed
    char sg_erase ;     // Erase character
    char sg_kill ;      // Kill character
    char sg_flags ;     // Control flags
} ;

В отличие от терминального интерфейса POSIX, терминальный интерфейс Unix седьмого издания записывал скорости ввода и вывода непосредственно в структуру данных. [15]

Входная и выходная скорости в sg_ispeed и sg_ospeed поля были такими же, как у DEC DH-11 , и представляли собой числа от 0 до 15, представленные символьными константами (в порядке возрастания). B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400, B4800, B9600, EXTA, и EXTB, где скорость передачи данных была такой же, как в названии (последние два — «внешний A» и «внешний B»). Установка нулевой скорости передачи данных заставила драйвер терминала повесить трубку модема (если терминал был модемным устройством). [14]

The sg_erase и sg_kill поля были просто значениями символов «стирания» и «уничтожения» соответственно, по умолчанию использовались значения (ASCII) для ' # ' и ' @ ' соответственно. [14]

The sg_flags В поле указаны различные флаги управления вводом и выводом, как показано в следующей таблице.

флаги для sg_flags поле sgtty структура данных [3]
символ восьмеричное значение описание
BSDELAY 0100000 задержка при написании BS персонажи
BS0 0000000
BS1 0100000
VTDELAY 0040000 задержка при написании ВТ и ФФ персонажи
FF0 0000000
FF1 0040000
CRDELAY 0030000 задержка при написании CR- персонажи
CR0 0000000
CR1 0010000
CR2 0020000
CR3 0030000
TBDELAY 0006000 задержка при написании табуляции Символы
XTABS технически не определяет задержку, а скорее приводит к преобразованию символов табуляции в последовательности из одного или нескольких пробелов.
TAB0 0000000
TAB1 00002000
TAB2 0004000
XTABS 0006000
NLDELAY 0001400 задержка при написании НЧ- персонажи
NL0 0000000
NL1 00000400
NL2 0001000
NL3 0001400
EVENP 0000200 даже паритет
ODDP 0000100 нечетная четность
RAW 0000040 «сырой» режим
CRMOD 0000020 режим отображения возврата каретки ( CR отображается на НЧ на входе и оба ЧР и НЧ превращаются в CR + НЧ на выходе)
ECHO 0000010 локальная эмуляция эха драйвером терминала
LCASE 0000004 преобразовать верхний регистр в нижний регистр при вводе
CBREAK 0000002 режим "cbreak"
TANDEM 0000001 включить управление потоком через модем

The tchars структура данных

[ редактировать ]

Одной из структур данных, используемых терминальными системными вызовами, является tchars структура, определение которой на языке программирования C выглядит следующим образом: [16]

struct tchars {
    char t_intrc ;      // Interrupt
    char t_quitc ;      // Quit
    char t_startc ;     // Start
    char t_stopc ;      // Stop
    char t_eofc ;       // End of File
    char t_brkc ;       // Break (alternative to hardwired LF character with same effect)
} ;

Значениями этих полей были значения различных программно настраиваемых специальных символов. Значение -1 в любом поле отключало его распознавание драйвером терминала. [16]

Библиография

[ редактировать ]
  • Борн, Стивен Р. (1983). Система UNIX . Международная серия по информатике. Аддисон-Уэсли. ISBN  978-0-201-13791-0 .
  • Кристиан, Кааре (1988). Операционная система UNIX (2-е изд.). Джон Уайли и сыновья. ISBN  978-0-471-84781-6 .
  • Леффлер, Сэмюэл Дж.; МакКьюсик, Маршалл Кирк ; Карелс, Майкл Дж.; Квартерман, Джон С. (1989). «Терминальное обслуживание». Проектирование и внедрение операционной системы 4.3BSD UNIX . Серия Аддисона-Уэсли по информатике. Аддисон-Уэсли. ISBN  978-0-201-06196-3 .
  • Злотник, Фред (1991). «Управление терминальными устройствами». Стандарт POSIX.1: руководство программиста . Паб Бенджамин / Каммингс. компании ISBN  978-0-8053-9605-8 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7667666d2d0f1acb3ec31253cc06e447__1696382220
URL1:https://arc.ask3.ru/arc/aa/76/47/7667666d2d0f1acb3ec31253cc06e447.html
Заголовок, (Title) документа по адресу, URL1:
Seventh Edition Unix terminal interface - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)