Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Код ошибки «Не пишущая машинка» в 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 » было «hup кладет трубку на пишущую машинку, которая ее использует». Аббревиатура TTY, которая широко используется даже в современных системах UNIX, расшифровывалась как « Teletype ». Общий термин « пишущая машинка », вероятно, использовался потому, что «Teletype» был зарегистрированным товарным знаком Teletype Corporation, дочерней компании AT&T.и был слишком конкретным. Название «Телетайп» произошло от более общего термина «телетайп»; использование «пишущая машинка» было другим сокращением того же первоначального термина.

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

Происшествие [ править ]

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

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

См. Также [ править ]

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • СМИ, связанные с " Не пишущая машинка" на Викискладе?