Não, /dev/stdin
e /dev/stdout
são o dispositivo errado. Estes não são dispositivos terminais, são aliases para entrada padrão e saída padrão, respectivamente. A entrada padrão e a saída padrão são, por definição, descritores de arquivo que as aplicações esperam estar abertas e ter um significado convencional (descritor de arquivo 0 e 1, respectivamente, há também 2, que é o erro padrão). Dispositivos como /dev/stdin
e /dev/stdout
são úteis quando um aplicativo requer um nome de arquivo, mas o usuário do aplicativo deseja que ele acesse um descritor de arquivo específico em vez de abrir algum arquivo. Dependendo da variante do unix, eles podem nem ser arquivos do dispositivo; por exemplo, no Linux, eles são links simbólicos para /proc/self/fd/0
e amigos, e estes são, por sua vez, links simbólicos "mágicos" para qualquer arquivo que o processo já tenha aberto naquele descritor de arquivo.
A alteração das permissões de /dev/stdin
e /dev/stdout
só mudaria o que acontece quando esses nomes de arquivo são usados explicitamente. Ele não afeta nada relacionado ao terminal e não afeta o uso normal da entrada padrão e da saída padrão, já que as permissões só importam ao abrir um nome de arquivo específico.
O que o mesg
faz é alterar as permissões do controlador de terminal do processo . Para um aplicativo que está sendo executado em um terminal, o terminal está aberto na entrada padrão, na saída padrão e no erro padrão (descritores de arquivo 0, 1 e 2). Você pode usar o comando tty
para ver o que é o dispositivo terminal. mesg n
é equivalente a chmod g-w "$(tty)"
e mesg y
é equivalente a chmod g+w "$(tty)"
.