Como posso determinar no meu sistema onde a substituição de processos cria arquivos FIFO?

Como posso determinar no meu sistema onde a substituição de processos cria arquivos FIFO?

Estou escrevendo um aplicativo C++ e preciso trabalhar com substituição de processos no shell Bash.

Estou tentando encontrar uma maneira de validar os caminhos passados ​​como argumentos para o meu programa, alguns dos quais apontam para arquivos FIFO criados por substituição de processo.

Existe uma maneira de shell (ou C++) que eu possa verificar se o sistema cria esses arquivos /dev/fdou se eles são criados em outro lugar?

Responder1

A resposta curta é que você não pode fazer isso. Só porque um diretório é o padrão do bash para colocar caminhos fifo, não significa que um fifo específico nesse diretório foi criado pelo bash ou que foi passado pelo bash como um argumento para o seu comando.

Dê uma olhada no panorama geral do seu problema. O que você REALMENTE está tentando resolver?

Se você está tentando resolver, "a saída do meu programa deve sempre ser canalizada para outro programa", então não exija que o usuário use a obscura substituição de processo do bash. E se o shell padrão do sistema for zsh? Concha Bourne? Concha Korn?

Em vez disso, faça com que seu programa crie um canal, bifurque e execute o outro programa.

Então, o que você está realmente tentando fazer? O que acontece se você, Deus me livre, gravar sua saída em um arquivo que o usuário do seu programa passou, em vez de em um fifo criado pelo bash?

Responder2

Use a -popção testse um arquivo for um canal:

#!/bin/bash
file="$1"
if [ -p "$file" ]
then
    echo "$file is a pipe"
fi

Demonstração:

$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe

informação relacionada