¿Cómo puedo determinar en mi sistema dónde la sustitución de procesos crea archivos FIFO?

¿Cómo puedo determinar en mi sistema dónde la sustitución de procesos crea archivos FIFO?

Estoy escribiendo una aplicación C++ y necesito trabajar con la sustitución de procesos en el shell Bash.

Estoy tratando de encontrar una manera de validar las rutas pasadas como argumentos para mi programa, algunas de las cuales apuntan a archivos FIFO creados mediante sustitución de procesos.

¿Existe alguna forma de Shell (o C++) para poder comprobar si el sistema crea estos archivos /dev/fdo si se crean en otro lugar?

Respuesta1

La respuesta corta es que no puedes hacer esto. El hecho de que un directorio sea el lugar donde bash coloca de forma predeterminada las rutas quince, no significa que bash haya creado un quince en particular en ese directorio, o que bash lo haya pasado como argumento para su comando.

Eche un vistazo al panorama más amplio de su problema. ¿Qué estás REALMENTE tratando de resolver?

Si está intentando resolver "la salida de mi programa siempre debe canalizarse a otro programa", entonces no requiera que el usuario utilice la oscura sustitución de procesos de bash. ¿Qué pasa si el shell predeterminado en su sistema es zsh? ¿Concha Bourne? ¿Cáscara de maíz?

En su lugar, haga que su programa cree una tubería, una bifurcación y ejecute el otro programa.

Entonces, ¿qué estás intentando hacer realmente? ¿Qué sucede si usted, Dios no lo quiera, escribe su salida en un archivo que pasó el usuario de su programa, en lugar de en un quince creado por bash?

Respuesta2

Utilice la -popción testsi un archivo es una tubería:

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

Manifestación:

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

información relacionada