23,121
社区成员
发帖
与我相关
我的任务
分享
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
int main()
{
pid_t pid;
int buf1,x,buf2;/*****************/
int fd[2];
pid=fork();
pipe(fd);
if(pid<0)
{
printf("error in fork!");
exit(0);
}
else if(pid==0)
{
buf1=getpid();
write(fd[1],(void*)buf1,sizeof(buf1));
close(fd[0]);
close(fd[1]);
x++;
printf("child:%d\n",getpid());
sleep(2);
}
else
{
printf("prarent before read\n");
read(fd[0],(void*)buf2,sizeof(buf2));/*阻塞处*/
/***************************************************
阻塞是根据输出判断的,能输出prarent before read,不能输出prarent before read则为阻塞。
int x,buf1,buf2; //阻塞
int buf1,x,buf2; //阻塞
int buf1,buf2,x; //不阻塞
原因何在?请指教。。。
*****************************************************/
printf("prarent before read\n");
close(fd[0]);
close(fd[1]);
printf("wait:%d\n",getpid());
wait(NULL);
}
printf("return:%d\n",getpid());
return 0;
}