1 建立管道
int pipe(int filedes[2]);
pipe()会建立管道,并将文件描述符由参filedes数组返回filedes[0]为管道里的读取端,filedes[1]则为管道的写入端。
下面的程序建立了两个管道,分别绑定到子进程父进程标准输入输出:
View Code
#include <unistd.h> #include <stdio.h> int main() { int fdins[2], fdouts[2]; pid_t pid; char buff[20]={0}; pipe(fdins); pipe(fdouts); pid=fork(); if (pid==0) { dup2(fdins[1], 1); close(fdins[0]); close(fdins[1]); dup2(fdouts[0], 0); close(fdouts[1]); close(fdouts[0]); write(STDOUT_FILENO, "child write", 11); read(STDIN_FILENO, buff, 19); fprintf(stderr, "--%s\n", buff); } else if (pid>0) { dup2(fdins[0], 0); close(fdins[1]); close(fdins[0]); dup2(fdouts[1], 1); close(fdouts[0]); close(fdouts[1]); write(STDOUT_FILENO, "parent write", 12); read(STDIN_FILENO, buff, 19); fprintf(stderr, "==%s\n", buff); } return 0; }