linux c 中简单的管道实现
管道一般用与父子进程之间通信,下面是一个简单的父子进程通信事例:
#include <unistd.h> #include <stdio.h> int main() { int fd[2]; //管道入口fd[0]为读,fd[1]为写入口 char r_buf[100]; char w_buf[20]= "hello word!"; pid_t pid; if(pipe(fd) < 0) //新建管道 { printf("pipe error!\n"); exit(1); } if((pid = fork()) < 0) { printf("fork error!\n"); }else if(pid == 0) //子进程 { printf("child\n"); close(fd[1]); //关闭写端口 sleep(2); //程序休眠2秒 read(fd[0], r_buf, 100);//读阻塞,当管道内写入东西后才读取,所以当主程序运行完成后,子程序才运行完成。子程序由init管理 printf("%s",r_buf); }else //主进程 { printf("father\n"); close(fd[0]); sleep(2); write(fd[1], w_buf, 20); } return 0; }