先写入信息,那么之前的进程写入的信息将被覆盖,父进程也就读不到之前进程传递来的信息了。
3. 说明你是如何实现父子进程之间的同步的。 父进程调用wait函数进入等待,待某子进程执行结束后被激活,继续执行。再一次调用wait等待另一个进程执行结束,等到时被激活,继续执行。
附:基本实验的代码:
#include
pid_t pid1;//子进程1 pid pid_t pid2;//子进程2 pid int fields[2];//管道两端 char input[100]; char output[100];
while(pipe(fields)!=0)//建立管道,失败退出 { }
while((pid1=fork())<0) { }
if(pid1==0)//当前为子进程1 { }
else if(pid1>0)//当前为父进程 {
while((pid2=fork())<0) { }
if(pid2==0)//当前为子进程2
printf(\生成子进程2失败!\\n\
printf(\生成了子进程1,PID:%d\\n\lockf(fields[1],1,0);//锁住写端口
sprintf(input,\,PID:%d\\n\write(fields[1],input,sizeof(input)); lockf(fields[1],0,0);//解锁写端口 exit(0);
printf(\生成子进程1失败!\\n\printf(\生成管道失败!\\n\
}
}
{ }
else if(pid2>0)//当前为父进程 { }
int i=0; for(;i<2;i++) { }
wait(0);//父进程进入阻塞状态,直到子进程执行结束 printf(\当前为父进程,PID:%d\\n\read(fields[0],output,100);
printf(\父进程从管道中读到的数据为:%s\\n\printf(\生成了子进程2,PID:%d\\n\lockf(fields[1],1,0);//锁住写端口
sprintf(input,\,PID:%d\\n\write(fields[1],input,sizeof(input)); lockf(fields[1],0,0);//解锁写端口 exit(0);
return 0;