管道是什么,如何使用之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