linux系统编程——管道编程实战
一、查看man手册
man 2 pipe
fork以后,父进程会拷贝一个空间给子进程,包括fd,父子进程的管道为同一个管道。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int fd[2];
int pid;//定义管道
char buf[128];//缓冲区
// int pipe(int pipefd[2]);
if(pipe(fd)==-1)//创建管道
{
printf("creat pipe failed\n");
}
pid=fork();//创建管道,调用子进程
if(pid<0)
{
printf("creat child failed\n");
}
else if(pid>0)
{
sleep(3);
printf("this is father\n");
close(fd[0]);
write(fd[1],"hello from father",strlen("hello from father"));
wait();
//写入管道时,关闭fd[0]
}
else
{
printf("this is child\n");
close(fd[1]);
read(fd[0],buf,128);
printf("read from father:%s\n",buf);
exit(0);
//读入管道时,关闭fd[1]。
}
return 0;
}
父进程睡眠3秒,先让子进程运行
——@上官可编程