问题:
1.父进程创建管道pipe
2.在子进程中执行expr程序,运算7+5
重定向 标准输出到管道的写端
dup2()
execlp(“expr”,“expr”,"","",NULL);
3.在父进程中,从无名管道的读端,将结果读出来,打印出来
1 #include<stdio.h> 2 #include<unistd.h>//pipe,close 3 4 int main(int argc,char *argv[]) { 5 int fd[2]; //filedes[0]读端 & filedes[1] 6 7 pid_t pid; 8 pid=vfork(); 9 if(pipe(fd)<0) { //创建通道 10 perror("pipe"); 11 _exit(-1); 12 } 13 //pid=vfork(); 14 if(pid<0) { 15 printf("fork"); 16 _exit(0); 17 }else if(pid==0) { //子进程-写 18 dup2(fd[1],1); 19 execlp("expr","expr","3","+","4",NULL); 20 _exit(-1); 21 }else{ //父进程-读 22 char buf[128]=""; 23 read(fd[0],buf,sizeof(buf)); 24 printf("buf is %s",buf); 25 } 26 return 0; 27 }
pid=vfor();在创建管道前面或后面,在标准输出中的打印是不同的。
pid=vfor();在前,无任何打印
pid=vfork();在后,打印