Вполне возможно, что файловые дескрипторы 0, 1 и 2 открыты как для чтения, так и для записи (и фактически они все ссылаются на одно и то же базовое «описание открытого файла»), и в этом случае вы делаетебуду работать.Но, насколько я знаю, гарантии нет, поэтому она тоже может не сработать.Я действительно полагаю, что POSIX где-то указывает, что, если stderr подключен к терминалу, когда программа вызывается оболочкой, он должен быть доступен для чтения и записи, но я не могу сразу найти ссылку ..
ОбычноЯ бы рекомендовал не читать с stdout или stderr, если вы не ищете терминал для чтения пароля, а stdin был перенаправлен (не tty).И я бы порекомендовал никогда не писать в stdin - это опасно, и вы могли бы в итоге забить файл, в который пользователь не ожидал быть записанным!