![Стандартные дескрипторы файлов ввода-вывода](https://rvso.com/image/31674/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5%20%D0%B4%D0%B5%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D1%80%D1%8B%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0.png)
Я это кодирую
$ 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 введите
echo $$
, чтобы получить PID этой оболочки. - В окне 2 скажите
cat /proc/[pid]/fd/1
- В окне 1 начните печатать и наблюдайте, что происходит в окне 2.
- /процна kernel.org
- процессв TLDP
- Файловые системына man7.org