О стандартном вводе. Любой пример для `[n]

xeyes не для развлечения, по крайней мере, не только. Цель этой программы — позволить вам следить за указателем мыши, который иногда трудно увидеть. Это очень полезно на многоголовых -компьютерах, где мониторы разнесены на некоторое расстояние, и если кто-то (скажем, учитель в школе )хочет что-то представить на экране, другие на своих мониторах могут легко следить за происходящим. мышь с xeyes.

-1
04.04.2019, 18:38
2 ответа

Нам действительно не следует открывать входной файл на стандартный вывод. (Вам нужно execдо этого перенаправления, чтобы оно работало. Но это, вероятно, все равно не удастся и заблокирует ). Если вы хотите открыть файл с помощью fd, просто используйте 3 или что-то в этом роде.

exec 3<filename
# do something with fd 3
exec 3<&-

Можно перенаправить на fd 0 (stdin ), но если вы выполняете fd 0, чтобы указать куда-то еще, то вы должны сначала сохранить его.

exec 3<&0
exec < filename
# do something with the file on fd 0
# restore stdin, free fd3
exec 0<&3 3<&-
0
28.01.2020, 05:08

1<filename— это перенаправление, оно говорит оболочке открыть файл filenameдля чтения и сделать его доступным в файловом дескрипторе 1 для выполняемой команды (или для всего процесса оболочки, если вы используете перенаправление сexec). Это обычно работает для всех перенаправлений:<отмечает перенаправление ввода,а необязательный номер в начале указывает номер файлового дескриптора.

Что необычно в этом перенаправлении, так это то, что fd 1 зарезервирован для стандартного потока вывода, поэтому программы обычно предполагают, что в него можно записывать. Если он открывается перенаправлением ввода, это предположение не выполняется.

$ touch filename
$ ls 1<filename
ls: write error: Bad file descriptor

То же самое произойдет, если вы откроете fd 2 (stderr )для ввода или fd 0 (stdin )для вывода .

$ cat 0> filename
cat: -: Bad file descriptor

Конечно, если запись в stderr невозможна, вы не получите сообщение об ошибке. Вы, вероятно, получите ложный ненулевой статус выхода.

2
28.01.2020, 05:08

Теги

Похожие вопросы