管道
父子进程
/*
* a.c
*
* Created on: Sep 12, 2017
* Author: zhouke
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main1(){
int pip[2];//0 read 1 write
int result;
pid_t pid;
result = pipe(pip);
if(result==-1){
printf("pipe error");
exit(-1);
}
pid = fork();
if(pid==0){
//parent write
close(pip[0]);
dup2(pip[1],STDOUT_FILENO);
execlp("ls","ls",NULL);
}else if(pid>0){
//child read
close(pip[1]);
dup2(pip[0],STDIN_FILENO);
execlp("wc","wc","-l",NULL);
}
return 0;
}
兄弟进程
/*
* test2.c
*
* Created on: Sep 12, 2017
* Author: zhouke
*/
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(){
int pip[2] ;
pid_t pid;
int result;
int i;
result = pipe(pip);
if(result==-1){
printf("error");
exit(-1);
}
for(i=0;i<2;i++){
pid = fork();
if(pid==0){
break;
}
}
if(i==2){
//parent 1
close(pip[0]);
close(pip[1]);
for(i=0;i<2;i++){
wait(NULL);
}
}else {
if(i==0){
//child 1
close(pip[0]);
dup2(pip[1],STDOUT_FILENO);
execlp("ls","ls",NULL);
}else if(i==1){
//child 2
close(pip[1]);
dup2(pip[0],STDIN_FILENO);
execlp("wc","wc","-l",NULL);
}
}
return 0;
}