View this PageEdit this PageUploads to this PageVersions of this PageHomeRecent ChangesSearchHelp Guide

TTYs, /dev/ptmx y /dev/pts/nn

Un pequeño resumen sobre el ENOTTY (cogido de un correo interno de SICO ;-):

ENOTTY



Quién lo devuelve


ENOTTY es un error que devuelven las ioctl que sólo se pueden usar con ttys cuando se usa con un file descriptor que no es una tty.

Qué significa


El ENOTTY significa que el dispositivo que se está intentando utilizar no es una TTY y has intentado hacer una ioctl de tty con él. Para obtener una tty, o bien usas stdin/stdout, un ttyS, o generas un nuevo tty haciendo un open de "/dev/ptmx" (ver "man 4 pts").

Situaciones que pueden provocar un ENOTTY


El ENOTTY sucede cuando se redirecciona la entrada/salida de un programa a un fichero o a un pipe que no son ttys, mientras que el programa requiere una tty.

También sucede cuando al hacer un system(), el "sh" no consigue abrir un nuevo tty para ejecutar el comando y el comando que ejecuta el system requiere un tty. Para no poder abrir un nuevo tty hay dos razones en Linux: que /dev/pts no esté montado, o se pueden haber acabado los "tty libres" (siendo esto último la causa más probable).

Resolución de problemas


Con eso al menos ya sabemos qué es el error. Si es en un programa que por lo demás funciona bien, lo lógico es suponer que lo que ha secedido es que se han acabado los ttys libres.

Se puede aumentar el número de ptys del sistema (ver http://linux.die.net/man/7/pty ). Por defecto el máximo son 256, y se puede subir hasta 2048. Se hace con:

# echo 2048 > /proc/sys/kernel/pty/max

Para saber el número de ptys usados en un momento dado, se hace con:

# cat /proc/sys/kernel/pty/nr

Si sucede con cierta frecuencia, se puede hacer un script que tracee periódicamente el número de ttys libres para confirmar que es realmente esto.