@Corona
That is one elegant piece of code. Initially, I was going to bug you with added clarifications on how the code was working, but then decided that after so much effort on your part, the least I could do was trace the code.
I did and it resolved those doubts
(Big surprise!)
I also went to your projects page burningsmell, and it appears that I have been talking to one awesome programmer.
Keep up the good work! And Thanks!
P.S - Additional somewhat unanswered question:
Instead of creating n-1 pipes for n commands, would it be possible to use the same single pipe by suitable adjusting the Fds?
My initial attempt tried to do that, but I got confused as to what's to be closed and what not to be.
From your code I surmised, we need to close anything in the parent that we don't use. But a close() call => that the FD no longer refers to any file. So when the parent closes the write end of the pipe with say curpipe{5,6} , how is the child allowed to use 6 to refer to the write end of the pipe?{is it because, in its address space, 6 is not closed? }
Sorry if these questions sound too basic, but i am unable to clearly visualize the address spaces like that. I think we can debug the child process using gdb, but I am not very familiar debugging multiple threads.