Inappropriate ioctl for device/ENOTTY error in Linux

Are you looking to know more about the “Inappropriate ioctl for device” error, also referred to using ENOTTY error code? The article below is a compilation of what I know so far about this specific error message.

Also see: How to fix “errno 5 input/output error”

What is ioctl?

ioctl, stands for “input/output control”, is an operation to send a control command to a device. It is used primarily by POSIX systems.

The ioctl function is useful for implementing a device driver to set the configuration on the device. e.g. a printer that has configuration options to check and set the font family, font size etc. ioctl could be used to get the current font as well as set the font to a new one. A user application uses ioctl to send a code to a printer telling it to return the current font or to set the font to a new one.

What is ENOTTY?

ENOTTY is the error code for “Inappropriate ioctl for device” error. The “Inappropriate ioctl for device” error simply indicates that the ioctl call to a device has not been done correctly, or the device is not responsible. This message replaces the traditional but puzzling “Not a typewriter” message which exists in older versions of POSIX systems. Its

Sometimes, you may see other information along with the “Inappropriate ioctl for device” error message, such as ENOTTY or errno=25. These are just the symbolic names for the same “Inappropriate ioctl for device” error.

ENOTTY used to be triggerred primarily by attempts to configure terminal properties (e.g. echo mode) on a file descriptor that isn’t actually a terminal (but something else, e.g. a regular file). More generally, ENOTTY is triggered when doing an ioctl on a device that does not support that ioctl control, hence the error string.

“Inappropriate ioctl for device” is a programming error, so if you’re not a software developer, your best bet is to ask the program’s author to fix the error.

[Errno 25] Inappropriate ioctl for device in Python

Generally, if you encounter IOError: [Errno 25] Inappropriate ioctl for device in Python, it generally means something is capturing stdout or manipulating stdin

In rare occasions, IDEs aimed towards Python such as PyCharm or Wing simulates Terminals, so running code snippets which involve in getting terminal information (such as shutil’s get_terminal_size()) may trigger [Errno 25] Inappropriate ioctl for device. The underlying issue may be because the OS has no way of getting rows and columns of a Simulated Terminal inside a IDE. Running the code in OS’s native Terminal solved this problem for me.

I hope that the information above helped you learn a bit more about on ENOTTY and Inappropriate ioctl for device error. You may want to check out our tutorials for Ubuntu such as chown “operation not permitted” errorHow to Hibernate in Ubuntuset up an Ubuntu-based NAS – LinuxPip and   Install OpenSSL in Ubuntu – LinuxPip

If you spot an error in the article, please kindly correct us using the comment section below.

Leave a Comment