管道一般是单向的。一个进程往里面写,另一个进程从里面读。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>int main()
{pid_t pid;int fd[2];int n;char buf[20]; //char* ?if(pipe(fd) < 0){perror("pipe error");exit(1);}pid = fork();if(pid < 0){perror("fork error");exit(1);}else if(pid > 0) //父进程{close(fd[0]); //关闭读功能write(fd[1], "hello pipe\n", 19);wait(NULL); //等待任意一个子进程终止}else // 0, 子进程{close(fd[1]);sleep(1);n = read(fd[0], buf, 20);write(1, buf, n);//第一个入参为1,表示标准输出}return 0;
}
程序输出是:
zhanghaodeMacBook-Pro:cpp_excise zhanghao$ g++ 无名管道.cpp
zhanghaodeMacBook-Pro:cpp_excise zhanghao$ ./a.out
hello pipe