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

0

Estou escrevendo um aplicativo C ++ e preciso trabalhar com a 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 em /dev/fd ou se eles são criados em algum outro lugar?

    
por Earl Sven 16.08.2011 / 10:54

2 respostas

0

A resposta curta é que você não pode fazer isso. Só porque um diretório é onde o bash padroniza a colocação de caminhos fifo, não significa que um fifo em particular naquele diretório tenha sido criado pelo bash, ou que tenha sido passado por bash como um argumento para o seu comando.

Veja a foto maior do seu problema. O que você está realmente 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 em seu sistema for zsh? Bourne shell? Casca de Korn?

Em vez disso, peça ao seu programa para criar um pipe, fork e executar o outro programa.

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

    
por 17.08.2011 / 08:34
0

Use a opção -p para test se um arquivo for um canal:

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

Demo:

$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe
    
por 16.08.2011 / 11:36