Не пишущая машинка - Not a typewriter

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

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

Подробности

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

«Пишущая машинка» была тем, чем раньше Unix системы, называемые терминалами. Это использование восходит к Первому изданию Руководство программиста Unix от 3 ноября 1971 года. Например, описание "привет "команда была" hup кладет трубку на пишущую машинку, которая ее использует. "Аббревиатура TTY, которая широко используется даже в современных системах UNIX, означает"Телетайп. «Общий термин»печатная машинка ", вероятно, использовался потому, что" Teletype "был зарегистрированным товарным знаком компании AT&T дочернее предприятие Телетайп Корпорация и был слишком конкретным. Название «Телетайп» произошло от более общего термина «телетайп»; использование «пишущая машинка» было другим сокращением того же первоначального термина.

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

Вхождение

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

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

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

Рекомендации

  1. ^ "Что означает ENOTTY?". www.abbreviations.com. Получено 2020-07-16.
  2. ^ Версия 6 Руководство UNIX, раздел 2, системные вызовы
  3. ^ A / UX: почта и «не пишущая машинка» (2/95) статья TA31349 на сайте support.apple.com (27 февраля 1995 г.)

внешняя ссылка