Respuestas:
Las canalizaciones simplemente están vinculadas a descriptores de archivo diferentes a 0 (stdin):
$ echo <(true)
/dev/fd/63
$ echo <(true) <(true)
/dev/fd/63 /dev/fd/62
Por supuesto, un proceso puede tener más de un descriptor de archivo abierto a la vez, por lo que no hay problema.
pipe()llamada al sistema.
pipe()y luego bifurca los subprocesos. El principal proceso hace tienen descriptores de ficheros adicionales se abren si se utiliza un tubo en el anonimato. Estos descriptores de archivo adicionales se pasan en el formulario /dev/fd/..., y el proceso generalmente los abrirá simplemente usando estos nombres de archivo. Esto los llevará a ser dup()editados, creando aún más descriptores de archivos abiertos. El proceso también podría usar el descriptor de archivo con nombre de inmediato sin ninguna llamada abierta ...
a, lo llamé como ./a <(ls), e imprimió con éxito la lista de archivos, demostrando que el descriptor de archivo nombrado (63 en mi caso) ya estaba abierto. El bash podría usar canalizaciones con nombre en un directorio temporal en arquitecturas diferentes a Linux, en cuyo caso no se abrirían descriptores de archivo adicionales al ingresar al proceso principal.
bashpágina del manual.