我正在编写一个函数,该函数将一个输入回显给一个sed,然后回传另一个sed。我以正确的方式使用了我所有的等待信号,但是我得到的最后一个打印结果是在回显中的第一个子进程中调用dup2()之前。
void sendbc (char * str_ ) { int fd[2]; int fd1[2]; int pid,pid1; char* echo[] = {"echo", str_,NULL}; char* sed1[] = {"sed","s/[^:]*;"" " "//",NULL}; char* sed2[] = {"sed","s/[^:]*."" " "//",NULL}; int status,er; FILE *f; if(pipe(fd) < 0){ exit(100); } if(pipe(fd1) < 0){ exit(100); } pid = fork(); if (pid == 0) { dup2(fd[1], 1) //last command before blocking close(fd[1]); close(fd[0]); execvp(echo[0], echo); printf("Error in execvp1\n"); }else{ wait(&status); pid = fork(); if (pid == 0){ dup2(fd[0], 0); dup2(fd1[1], 1); dup2(fd1[1], 2); close(fd[1]); close(fd[0]); close(fd1[1]); close(fd1[0]); execvp(sed1[0],sed1); printf("Error in execvp2\n"); }else{ wait(&status); dup2(fd1[0],0); dup2(1,2); //dup2(1,1); close(fd1[1]); close(fd1[0]); execvp(sed2[0],sed2); printf("Error in execvp3\n"); } } if(pid!=0) wait(&status); close(fd[0]); close(fd[1]); close(fd1[1]); close(fd1[0]); }
我可以想象2种可能性... dup2正在阻塞,或者我需要创建更多进程,因为它在调用时结束了进程,但是在快速阅读他的手册页后,听起来不对...这可能是什么?
我正在编写一个函数,该函数将一个输入回显给一个sed,然后回传另一个sed。我以正确的方式使用了我所有的等待信号,但我得到的最后一个打印结果是在第一个孩子中调用dup2()之前...