Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

bash doesn't create named pipe filesystem objects when you use process substitution, it passes file descriptors via the dynamically created kernel managed /dev/fd paths. There is nothing to clean up.


Oh, I think I see what you're saying. So calling them named pipes is inaccurate, then. If I'm not mistaken, using features of the /dev filesystem would be dependent on Linux, then. Either way, it isn't really a very robust design. Not like a pipe returned by pipe(2) and passed to a program that is expecting it. Simple unnamed pipes are a fundamental part of unix.

Here's what the man page says:

       Process  substitution  is  supported on systems that support named pipes (FIFOs) or the /dev/fd method of
       naming open files.  It takes the form of <(list) or >(list).  The process list is run with its  input  or
       output  connected  to  a FIFO or some file in /dev/fd.  The name of this file is passed as an argument to
       the current command as the result of the expansion.  If the >(list) form is used,  writing  to  the  file
       will  provide input for list.  If the <(list) form is used, the file passed as an argument should be read
       to obtain the output of list.
So it's done with /dev/fd if that's available, which basically means Linux with that filesystem mounted. Otherwise it falls back on named pipes.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: