管道
--父与子读写
int main(void)
{
int ret_pipe=0;
int pipefd[2];
pid_t ret_fork=0;
const char *buf="hello world";
char r_buff[1024];
ret_pipe=pipe(pipefd);//0代表成功了 -1代表没成功
if(ret_pipe==-1){
exit(1);//不正常退出
}
ret_fork=fork();
if(ret_fork==0){
close(pipefd[1]);//pipefd[0]读功能 pipefd[1]写功能
read(pipefd[0],r_buff,strlen(buf));//从管道读出
write(STDOUT_FILENO,r_buff,strlen(buf));//在终端输出
close(pipefd[0]);
}else if(ret_fork >0){
close(pipefd[0]);
write(pipefd[1],buf,strlen(buf));//往管道里写入
close(pipefd[1]);
sleep(1);
}
exit(0);
return 0;
}
--兄弟之间读写
#include <stdio.h>
#include<unistd.h>
int main(void)
{
int ret_pipe=0;
int pipefd[2];
pid_t ret_fork=0;
const char *buf="hello world";
char r_buff[1024];
ret_pipe=pipe(pipefd);
if(ret_pipe==-1){
exit(1);
}
int i=0;
for(;i<2;i++){
ret_fork=fork();
if(ret_fork==-1){perror("fork_error");}
else if(ret_fork==0){break;}//保证不能有孙子 在父进程这句话不起作用
//只有在子进程这句话才会起作用跳出去
}
if(i==0){//其中一个儿子往管道里写
close(pipefd[0]);
write(pipefd[1],buf,strlen(buf));//往管道里写入
close(pipefd[1]);
}
else if(i==1){//另一个儿子从管道里读
close(pipefd[1]);//pipefd[0]读功能 pipefd[1]写功能
read(pipefd[0],r_buff,strlen(buf));//从管道读出
write(STDOUT_FILENO,r_buff,strlen(buf));//在终端输出
close(pipefd[0]);
}
else if(i==2){//父进程只有i==2才能从循环出来
wait(NULL);
}
exit(0);
return 0;
}