#include "kernel/types.h"
#include "kernel/stat.h"
#include "user/user.h"
#include <stddef.h>
int main (int argc,char* argv[]){
int pid,pid_s,pid_f,ret;
char r_buf[512],w_buf[512];
int pfd[2],sfd[2];
//strcpy(w_buf,"pingpong");
pipe(pfd); // father write ,son read
pipe(sfd); // father read ,son write
pid = fork();
if(pid == 0){
/* when pid == 0 ,it is son*/
pid_s = getpid();
strcpy(w_buf,"pong");
close(sfd[0]);
close(pfd[1]);
ret = write(sfd[1],w_buf,sizeof(w_buf));
if(ret < 0)
printf("Son write error\n");
close(sfd[1]);
ret = read(pfd[0],r_buf,sizeof(r_buf));
if(ret < 0)
printf("Son read error\n");
printf("%d Son recived ping \n",pid_s);
sleep(10);
exit(0);
}
pid_f = getpid();
close(pfd[0]);
close(sfd[1]);
ret = write(pfd[1],w_buf,sizeof(w_buf));
if(ret < 0)
printf("Father write error\n");
close(pfd[1]);
ret = read(sfd[0],r_buf,sizeof(r_buf));
if(ret < 0)
printf("Father read error\n");
wait(0);//wait son return 0 ,then print
printf("%d father received pong\n",pid_f);
exit(0);
}
fork出来的子进程,会跟父进程出现抢占CPU IO等资源。
在 父进程中加wait调用,等子进程正常退出之后再去打印