Как я могу определить в моей системе, где процесс подстановки создает файлы FIFO?
Я пишу приложение на C++ и мне нужно работать с подстановкой процессов в оболочке Bash.
Я пытаюсь найти способ проверки путей, передаваемых в качестве аргументов моей программе, некоторые из которых указывают на файлы FIFO, созданные путем подстановки процессов.
Есть ли способ оболочки (или C++), чтобы я мог проверить, создает ли система эти файлы в /dev/fd
или если они созданы где-то еще?
2 ответа
Краткий ответ: вы не можете этого сделать. То, что в каталоге bash по умолчанию указываются пути fifo, не означает, что конкретное fifo в этом каталоге было создано bash или что оно было передано bash в качестве аргумента вашей команде.
Посмотрите на общую картину вашей проблемы. Что вы ДЕЙСТВИТЕЛЬНО пытаетесь решить?
Если вы пытаетесь решить, "вывод моей программы должен всегда передаваться в другую программу", тогда не требуйте от пользователя использовать скрытую подстановку процесса в bash. Что если оболочкой по умолчанию в их системе является zsh? Оболочка Борна? Корн скорлупа?
Вместо этого попросите вашу программу создать pipe, fork и выполнить другую программу.
Итак, что вы действительно пытаетесь сделать? Что произойдет, если вы, не дай Бог, запишите свой вывод в файл, который передал пользователь вашей программы, а не в fifo, созданный bash?
Использовать -p
возможность test
if a file is a pipe:
#!/bin/bash
file="$1"
if [ -p "$file" ]
then
echo "$file is a pipe"
fi
Демо-версия:
$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe