这实际上没有进行错误检查,但是为什么这么复杂?
int main (int argc, char ** argv) { int i; for( i=1; i<argc-1; i++) { int pd[2]; pipe(pd); if (!fork()) { dup2(pd[1], 1); // remap output back to parent execlp(argv[i], argv[i], NULL); perror("exec"); abort(); } // remap output from previous child to input dup2(pd[0], 0); close(pd[1]); } execlp(argv[i], argv[i], NULL); perror("exec"); abort();}


