Как я могу определить в моей системе, где процесс подстановки создает файлы 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
Другие вопросы по тегам