linux高手讲课

管道

--父与子读写
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 
#include
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;
}

你可能感兴趣的:(linux高手讲课)