Нет, /dev/stdin
и /dev/stdout
неправильное устройство. Это не терминальные устройства, это псевдонимы для стандартного ввода и стандартного вывода соответственно. Стандартный ввод и стандартный вывод, по определению, являются файловыми дескрипторами, которые приложения ожидают, чтобы быть открытыми, и имеют обычное значение (дескриптор файла 0 и 1 соответственно, также есть 2, что является стандартной ошибкой). Такие устройства, как /dev/stdin
и /dev/stdout
, полезны, когда приложению требуется имя файла, но пользователь приложения хочет, чтобы оно получило доступ к определенному дескриптору файла, а не открывало какой-либо файл. В зависимости от варианта Unix, они могут даже не быть файлами устройств; например, в Linux они являются символическими ссылками на/proc/self/fd/0
и друзья, и это, в свою очередь, «магические» символические ссылки на любой файл, который процесс уже открыл в этом файловом дескрипторе.
Изменение разрешений /dev/stdin
и /dev/stdout
изменит только то, что происходит, когда эти имена файлов используются явно. Это не влияет ни на что, связанное с терминалом, и не влияет на нормальное использование стандартного ввода и стандартного вывода, поскольку разрешения имеют значение только при открытии определенного имени файла.
Что mesg
значит изменить разрешения контролирующего терминала процесса . Для приложения, работающего в терминале, терминал открыт при стандартном вводе, стандартном выходе и стандартной ошибке (файловые дескрипторы 0, 1 и 2). Вы можете использовать команду, tty
чтобы увидеть, что такое терминальное устройство. mesg n
эквивалентно chmod g-w "$(tty)"
и mesg y
эквивалентно chmod g+w "$(tty)"
.
mesg n
можешь использовать разрешение повлиять на будущееwrite
s только потому , чтоwrite
не уже есть терминал открыты.