Ні, /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
НЕ вже є термінал відкриті.