stringtranslate.com

Не пишущая машинка

Код ошибки «Не пишущая машинка» в Linux.

В вычислительной технике " Not a typewriter " или ENOTTY [1] — это код ошибки, определенный в errno.h, который можно найти во многих системах Unix . Этот код теперь используется для указания того, что в системном вызове ioctl был указан недопустимый номер ioctl (управление вводом/выводом) .

Подробности

Эта ошибка возникла в ранних версиях UNIX . В версии 6 UNIX и ранее управление вводом-выводом было ограничено терминальными устройствами с последовательным подключением, обычно телетайпом (сокращенно TTY), через системные вызовы gtty и stty. [2] Если была сделана попытка использовать эти вызовы на нетерминале, генерировалась ошибка ENOTTY . Когда системные вызовы stty/gtty были заменены более общим вызовом ioctl (управление вводом-выводом), код ошибки ENOTTY сохранялся.

Ранние компьютеры и системы Unix использовали электромеханические пишущие машинки в качестве терминалов . [3] [4] Аббревиатура TTY, которая широко встречается в современных системах UNIX, означает « Телетайп ». Например, первоначальное значение сигнала SIGHUP заключается в том, что он отключает телефонную линию на телетайпе, который его использует. Общий термин «пишущая машинка», вероятно, использовался потому, что «Teletype» был зарегистрированной торговой маркой дочерней компании AT&T Teletype Corporation и был слишком специфичным. Название «Teletype» произошло от более общего термина «teletypewriter»; использование «typewriter» было другим сокращением того же исходного термина.

POSIX обходит эту проблему, описывая ENOTTY как «не терминал». [5]

Поскольку ioctl теперь поддерживается не только на терминалах, но и на других устройствах, некоторые системы вместо этого отображают другое сообщение, например «Неподходящий ioctl для устройства». [6] [7]

Происшествие

В некоторых случаях это сообщение будет появляться даже тогда, когда программой не было выдано ни одного ioctl . Это связано со способом работы подпрограммы библиотеки isatty(). Код ошибки errno устанавливается только в случае сбоя системного вызова. Один из первых системных вызовов, выполняемых стандартной библиотекой ввода-вывода C, находится в вызове isatty(), используемом для определения того, выполняется ли программа интерактивно человеком (в этом случае isatty() будет выполнен успешно, и библиотека будет записывать свой вывод по строке за раз, чтобы пользователь видел обычный поток текста) или как часть конвейера (в этом случае она записывает блок за раз для эффективности). Если библиотечная процедура завершается сбоем по какой-то причине, не связанной с системным вызовом (например, из-за того, что имя пользователя не найдено в файле паролей), и наивный программист слепо вызывает обычную процедуру сообщения об ошибках perror() при каждой ошибке, оставшийся ENOTTY приведет к совершенно неуместному сообщению «Не пишущая машинка» (или «Не телетайп», или «Неподходящий ioctl для устройства»), которое будет доставлено пользователю.

В течение многих лет почтовая программа UNIX sendmail [8] содержала эту ошибку: когда почта доставлялась из другой системы, почтовая программа запускалась неинтерактивно. Если адрес назначения был локальным, но ссылался на имя пользователя, не найденное в локальном файле паролей, сообщение, отправленное обратно отправителю электронной почты, было объявлением о том, что человек, с которым они пытались связаться, не был пишущей машинкой.

Смотрите также

Ссылки

  1. ^ "Что означает ENOTTY?". www.abbreviations.com . Получено 16 июля 2020 г. .
  2. ^ Руководство по UNIX версии 6, раздел 2, системные вызовы
  3. Руководство программиста Unix. 3 ноября 1971 г.
  4. RFC  1, Host Software , Стив Крокер (7 апреля 1969 г.). Страница 3, раздел «Простое использование».
  5. ^ «Спецификации Open Group Base, выпуск 7, издание 2018 г./IEEE Std 1003.1-2017: isatty».
  6. ^ «Руководство OpenBSD: введение, errno — введение в системные вызовы и номера ошибок».
  7. ^ «Руководство FreeBSD: введение — введение в системные вызовы и номера ошибок».
  8. A/UX: почта и «не пишущая машинка» (2/95) статья TA31349 на support.apple.com (27 февраля 1995 г.)

Внешние ссылки