Not a typewriter
プログラムがioctlを発行しなくても、このメッセージが発生する場合がある。それは、isatty()ライブラリルーチンによるものである。エラーコードerrnoは、システムコールが失敗したときにのみ設定される。C標準I/Oライブラリが最初に行うシステムコールの一つがisatty()コールであり、プログラムが人間によって対話的に実行されているのか(この場合isatty()は成功し、ライブラリは出力を一度に一行ずつ書くので、ユーザーはテキストの流れを見ることができる)、あるいはパイプラインの一部として実行されているのか(この場合、効率化のためにテキストをまとめて書く)を判断するために使用される。システムコールとは関係のない理由でライブラリルーチンが失敗した場合(例えば、passwdファイルにユーザ名が見つからなかった場合など)、(経験の浅いプログラマが)失敗のたびにいちいち通常のエラー報告ルーチンperror()を呼び出していると、残ったENOTTYによって全く不適切な"not a typewriter"エラーが表示されることになる。
かつて、UNIXのメールサーバプログラムsendmailには長期に渡りこのバグがあった。他のシステムからメールが配信されるとき、メールプログラムは非対話的に実行されていた。宛先アドレスがローカルで、ローカルのパスワードファイルにないユーザー名を参照していた場合、メールの送信者に対し、「送信先はタイプライターではない」という通知が送信されていた。