No, /dev/stdin
y /dev/stdout
son el dispositivo equivocado. Estos no son dispositivos terminales, son alias para entrada estándar y salida estándar respectivamente. La entrada estándar y la salida estándar son, por definición, descriptores de archivo que las aplicaciones esperan que estén abiertas y tengan un significado convencional (descriptor de archivo 0 y 1 respectivamente, también hay 2, que es un error estándar). Los dispositivos como /dev/stdin
y /dev/stdout
son útiles cuando una aplicación requiere un nombre de archivo, pero el usuario de la aplicación desea que acceda a un descriptor de archivo en particular en lugar de abrir algún archivo. Dependiendo de la variante de Unix, puede que ni siquiera sean archivos de dispositivo; por ejemplo, en Linux, son enlaces simbólicos a/proc/self/fd/0
y amigos, y estos son a su vez enlaces simbólicos "mágicos" a cualquier archivo que el proceso ya haya abierto en ese descriptor de archivo.
Cambiar los permisos de /dev/stdin
y /dev/stdout
solo cambiaría lo que sucede cuando estos nombres de archivo se usan explícitamente. No afecta nada relacionado con el terminal, y no afecta el uso normal de entrada y salida estándar, ya que los permisos solo importan al abrir un nombre de archivo en particular.
Lo que mesg
hace es cambiar los permisos de la terminal de control del proceso . Para una aplicación que se ejecuta en un terminal, el terminal está abierto en entrada estándar, salida estándar y error estándar (descriptores de archivo 0, 1 y 2). Puede usar el comando tty
para ver cuál es el dispositivo terminal. mesg n
es equivalente a chmod g-w "$(tty)"
y mesg y
es equivalente a chmod g+w "$(tty)"
.
mesg n
puede usar permisos para afectar futuroswrite
s solo porquewrite
aún no tiene el terminal abierto.