Стандартные дескрипторы файлов ввода-вывода

Стандартные дескрипторы файлов ввода-вывода

Я это кодирую

$ ls -l 1> stdout.txt

и я получаю желаемый результат,

1> stdout.txt

перенаправляет вывод из стандартного вывода в файл stdout.txt.

Я не вижу такого файла на диске. Какая файловая система поддерживает такие файлы?рамфс?

Имеет ли это какое-либо сходство сprocfsиsysfs?

решение1

Если вы используете Linux, и я правильно понял ваш вопрос, то да, посмотрите/proc.

Для конкретного процесса смотрите /proc/[pid]/fd, например,ls -l /proc/123/fd/

Существует также специальный способ доступа к текущим файловым дескрипторам процесса: /proc/self/fd.

Обратите внимание, что eg ls -l /proc/self/fdбудет относиться к lsпроцессу, а не к вашей текущей оболочке, что можно увидеть с помощью:

cat /proc/self/cmdline | tr '\000' '\n'

или

cat /proc/self/status

Напоследок обратите внимание на PPidто, какой должен быть PID вашей оболочки.

Name:   cat
State:  R (running)
Tgid:   12696
Pid:    12696
PPid:   312

В качестве эксперимента вы можете попробовать открыть два окна терминала:

  1. В окне 1 введите echo $$, чтобы получить PID этой оболочки.
  2. В окне 2 скажитеcat /proc/[pid]/fd/1
  3. В окне 1 начните печатать и наблюдайте, что происходит в окне 2.

Связанный контент