Кіріспе

UNIX қате коды
Unix қате коды

Компьютерде "Not a typewriter" немесе ENOTTY – көптеген Unix жүйелеріндегі errno.h файлында анықталған қате коды. Бұл код қазір ioctl жүйелік шақыруында жарамсыз ioctl (кіріс/шығыс басқару) нөмірі берілгенін көрсету үшін қолданылады.

Егжей-тегжейлер

Бұл қате алғашқы UNIX жүйелерінде пайда болды. UNIX-тің 6-шы нұсқасында және одан бұрынғы нұсқаларында кіріс-шығыс (I/O) басқаруы көбінесе gtty және stty жүйелік шақырулары арқылы сериялық байланыспен қосылған терминал құрылғыларымен, әдетте телетиппен (қысқаша TTY) шектелген. Егер осы шақыруларды терминал емес құрылғыда қолдануға тырысқанда, ENOTTY қатесі туындады. stty/gtty жүйелік шақырулары ioctl (кіріс-шығыс басқаруы) шақыруымен ауыстырылғанда, ENOTTY қате коды сақталды. Алғашқы компьютерлер мен Unix жүйелері терминал ретінде электромеханикалық жазу машиналарын пайдаланды. Қазіргі UNIX жүйелерінде кеңінен қолданылатын TTY аббревиатурасы "Teletypewriter" (телетайп машинасы) дегенді білдіреді. Мысалы, SIGHUP сигналының бастапқы мағынасы – телетайп машинасына қосылған телефон желісін ажырату. "Тайптайп" термині "Teletype" AT&T еншілес компаниясы Teletype Corporation-ның тіркелген тауарлық белгісі болғандықтан және тым арнайы болғандықтан қолданылған болуы мүмкін. "Teletype" атауы "телетайп" деген жалпы терминнен туындаған, ал "тайп" сөзін қолдану – сол бастапқы терминнің басқаша қысқартылған түрі. POSIX бұл мәселені ENOTTY қатесін "терминал емес" деп сипаттап шешіп алды. Ioctl енді терминалдардан басқа құрылғыларда да қолдау көрсетілгендіктен, кейбір жүйелер "Құрылғы үшін тиіссіз ioctl" сияқты басқа хабарламаны көрсетуі мүмкін.

Пайда болуы

Кейбір жағдайларда, бұл хабарлама бағдарламадан ioctl сұранысы жасалмаған кезде де пайда болуы мүмкін. Бұл isatty кітапханасының жұмыс істеу принципіне байланысты. Errno қате коды тек жүйелік шақыру сәтсіз аяқталғанда ғана орнатылады. C стандартты кіріс-шығыс кітапханасы жасаған алғашқы жүйелік шақырулардың бірі – бағдарламаның адаммен интерактивті түрде жұмыс істейтінін анықтау үшін қолданылатын isatty шақыруы (мұндай жағдайда isatty сәтті орындалады және кітапхана шығысын жол-жолмен жазады, нәтижесінде пайдаланушы мәтіннің үздіріліссіз ағынын көреді) немесе құбырдың бір бөлігі ретінде (мұндай жағдайда тиімділік үшін бірден бір блок жазады). Егер кітапхананың әрекеті жүйелік шақырумен байланысты емес себептерге байланысты сәтсіз болса (мысалы, пароль файлында пайдаланушы аты табылмайтын болса) және тәжірибесіз бағдарламашы әр сәтсіздікке қарамастан, қате туралы хабар беру функциясын (perror) салғысыз түрде шақырып жатса, қалған ENOTTY коды пайдаланушыға мүлдем орынсыз "Жазу машинасы емес" (немесе "Телетайп емес" немесе "Құрылғы үшін қолайсыз ioctl") деген хабарламаны жеткізеді. UNIX пошта бағдарламасы sendmail көп жылдар бойы осындай қатеге тап болды: басқа жүйеден пошта келген кезде, пошта бағдарламасы интерактивті емес режимде жұмыс істеді. Егер мақсатты мекенжай жергілікті болса, бірақ жергілікті пароль файлында табылмайтын пайдаланушы атына сілтеме жасалса, электрондық хаттың авторына жіберілген хабарлама, олармен байланысуға тырысқан адамның жазу машинасы емес екендігі туралы хабарлама болды.