这是一个主线程中创建两个子线程,第一子线程先写入管道中信息结束,第二个子线程等到第一个子线程结束后,写入信息。最后通过主线程等待两个线程结束后读出管道的内容并打印。感觉第二个线程会覆盖第一个线程的数据,打印进程2写入的内容,要么都写入成功。结果:process1。却打印出进程1的数据。求解答!!!感谢!!!
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<string.h>
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("%s\n",buf);
//wait(NULL);//优先子进程
//read(pfd[0],buf,32);
//printf("%s\n",buf);
}
}
return 0;
}