管道一般用与父子进程之间通信,下面是一个简单的父子进程通信事例:
#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;
}