cleey
望着那一丝海线,若隐若现。落日下的海霞,数不尽的美,看不完的醉
管道是什么,如何使用之C实现管道的通信

管道:Linux 支持的最初Unix IPC形式之一

单向流动;双方通信需建立两个管道;

管道是一端写,一端读,那么看看 linux 的pipe函数

pipe()会建立管道,并将文件描述词交由参数pipefd数组返回。

pipefd[0]为管道里的读取端

pipefd[1]则为管道的写入端

返回值:若成功则返回零,否则返回-1,错误原因存于errno中。

代码如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <string.h>
int main(int argcchar *argv[]){
    int pipefd[2];  // 0为读  1为写
    int pid;
    if( pipe(pipefd) == -1 ){
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    pid = fork();
    if( pid == -1){
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if( pid == 0 ){ // 子进程
        close(pipefd[1]); // 关闭写管道

        char buf;
        while( read(pipefd[0],&buf,1) > 0 )  // 一个字符一个字符读取管道
            write(STDOUT_FILENO,&buf,1)   ;

        close(pipefd[0]); // 关闭读管道
        _exit(EXIT_SUCCESS);
    }else{ // 父进程
        close(pipefd[0]); // 关闭读管道

        char *buf = "This is father write into pipe\n";
        write(pipefd[1],buf,strlen(buf)); // 往管道里面写
        close(pipefd[1]);
        wait(NULL);
        exit(EXIT_SUCCESS);
    }
}

结果为子进程输出的:

This is father write into pipe
<< 上一篇 Hbuilder移动APP解决方案 PHP变量的结构和类型 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |