Not a typewriter
Ця стаття є сирим перекладом з іншої мови. Можливо, вона створена за допомогою машинного перекладу або перекладачем, який недостатньо володіє обома мовами. (серпень 2018) |
В обчисленні, "Not a typewriter" або ENOTTY є кодом помилки, він визначається в errno.h, заголовному файлі стандартної бібліотеки мови програмування C, який міститься на багатьох системах Unix. Цей код в даний час використовується, щоб вказати, що номер ioctl (керування вводом-виводом, англ. input/output control), що був вказаний в системному виклику ioctl, - недійсний.
Деталі
ред.Системний виклик ioctl спочатку підтримувався тільки на термінальних пристроях, також відомих як телетайп; з цієї причини, назва помилки була скорочена як ENOTTY.
"Typewriter" - це термінал, як його називали ранні системи UNIX. Використання цього значення повертається до першого видання Довідника програміста UNIX (англ. The Unix Programmer's Manual), від 3 листопада 1971 року. Наприклад, опис команди "hup" був таким: "hup вішає трубку на машинці, яка використовує його." Скорочення TTY, яке набуло значного поширення навіть в сучасних системах UNIX, виступало за "Teletype". Загальний термін "typewriter", ймовірно, використовувався, тому що "Teletype" був зареєстрований, як товарний знак компанії AT&T — дочірньої компанії Teletype Corporation і мав занадто специфічний характер. Назву "Teletype" було отримано з більш загального терміна - "teletypewriter"; використання "typewriter" було іншим скороченням того ж початкового терміну.
Оскільки ioctl тепер підтримувався на інших пристроях, крім терміналів, деякі системи відображають натомість інше повідомлення, таке як "невідповідний ioctl для пристрою".
Прояви
ред.У деяких випадках, це повідомлення буде траплятися навіть при відсутності системного виклику. Це пов'язано з порядком роботи бібліотеки isatty (). Натомість код помилки ERRNO встановлюється тільки при виході з ладу цього системного виклику. Один з перших системних викликів, зроблених за I / O стандартом бібліотеки C знаходиться в виклику isatty (), що використовується для визначення, чи програма була запущена в інтерактивному режимі за участі людини (в цьому випадку виклик isatty () буде успішним, тому користувач бачитиме регулярний потік тексту) чи як частина комунікаційної лінії. Якщо порядок бібліотеки виходить з ладу з якихось причин, не пов'язаних з системним викликом (наприклад, тому що ім'я користувача не знайдено у файлі паролів) і наївний програміст наосліп викликає стандартну процедуру подання звітності perror() на кожній невдачі, то та ENOTTY, що залишилася, призведе до абсолютно недоречного коду помилки "Not a typewriter", який доставляється користувачеві.
Протягом багатьох років поштова програма Sendmail містила цю помилку: коли пошта була доставлена з іншої системи, поштова програма в той час не запускалась інтерактивно. Якщо адреса одержувача був місцевою, але посилалася на ім'я користувача, якого не знайдено в локальному файлі паролів, повідомлення, що відправлялось назад відправнику листа, ставало заявою про те, що людина, з якою він намагався спілкуватися не була "тайпврайтером".
Див. також
ред.Посилання
ред.- A/UX: mail and "not a typewriter" [Архівовано 30 червня 2016 у Wayback Machine.] (2/95)article TA31349 on support.apple.com (February 27, 1995)