今天把APUE翻出来看看 那五个函数的实现可以作为学习的好例子 TELL_WAIT TELL_PARENT TELL_CHILD WAIT_PARENT WAIT_CHILD 1.用signal实现 #include "apue.h" static int pdf1[1],pfd2[2]; void TELL_WAIT(void) { if(pipe(pfd1)<0 || pipe(pfd2)<0) err_sys("pipe error"); } void TELL_PARENT(pid_t pid) { if(write(pdf2[1],"c",1)!=1) err_sys("write error"); } void WAIT_PARENT(void) { char c; if(read(pfd1[0],&c,1)!=1) err_sys("read error"); if(c!='p') err_quit("WAIT_PARENT: incorrect data"); } void TELL_CHILD(pid_t pid) { if(write(pdf1[1],"p",1)!=1) err_sys("write error"); } void WAIT_CHILD(void) { char c; if(read(pdf2[0],&c,1)!=1) err_sys("read error"); if(c!='c') err_quit("WAIT_CHILD: incorrect data"); } 2.用pipe实现 #include "apue.h" static int pdf1[1],pfd2[2]; void TELL_WAIT(void) { if(pipe(pfd1)<0 || pipe(pfd2)<0) err_sys("pipe error"); } void TELL_PARENT(pid_t pid) { if(write(pdf2[1],"c",1)!=1) err_sys("write error"); } void WAIT_PARENT(void) { char c; if(read(pfd1[0],&c,1)!=1) err_sys("read error"); if(c!='p') err_quit("WAIT_PARENT: incorrect data"); } void TELL_CHILD(pid_t pid) { if(write(pdf1[1],"p",1)!=1) err_sys("write error"); } void WAIT_CHILD(void) { char c; if(read(pdf2[0],&c,1)!=1) err_sys("read error"); if(c!='c') err_quit("WAIT_CHILD: incorrect data"); }