        |
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.
|