这是一个主线程中创建两个子线程,第一子线程先写入管道中信息结束,第二个子线程等到第一个子线程结束后,写入信息。最后通过主线程等待两个线程结束后读出管道的内容并打印。感觉第二个线程会覆盖第一个线程的数据,打印进程2写入的内容,要么都写入成功。结果:process1。却打印出进程1的数据。求解答!!!感谢!!!
#include#include #include #include #include #include int main(void) { pid_t pid1,pid2; char buf[32]; int pfd[2]; if(pipe(pfd)<0)//创建管道 { perror("pipe"); exit(-1); } if((pid1 = fork())<0)//创建子进程1 { perror("fork"); exit(-1); } else if(pid1 == 0)//子进程1写入buf后退出 { strcpy(buf,"process1"); write(pfd[1],buf,32); exit(0); } else { if((pid2 = fork())<0)//创建子进程2 { perror("fork"); exit(-1); } else if(pid2 == 0)//子进程2写入buf后退出 { sleep(1);//延时,防止子进程1和子进程2同时写 strcpy(buf,"process2"); write(pfd[1],buf,32); } else { sleep(4);//等待进程12结束 //wait(NULL);//优先子进程 read(pfd[0],buf,32); printf("%sn",buf); //wait(NULL);//优先子进程 //read(pfd[0],buf,32); //printf("%sn",buf); } } return 0; }



