为了更好的理解管道的读与写,请看下面的一段程序:
#include#include#include#include#include
int main()
{
int pipe_fd[2];
pid_t pid;
char buf_r[100];
char *p_wbuf;
int r_num;
memset(buf_r,0,sizeof(buf_r));//把一段内存清0
if(pipe(pipe_fd)<0)//创建管道
{
printf("pipe create error\n");
return -1;
}
if((pid=fork())==0)//创建一子进程,如果子进程先运行
{
printf("\n");
close(pipe_fd[1]);//关闭子进程写描述符,并通过使父进程暂停2s确保
//父进程已关闭相应的读描述符
sleep(2);
if((r_num=read(pipe_fd[0],buf_r,100))>0)//子进程读取管道内容
{
printf("%d numbers read from the pipe is %s\n",r_num,buf_r);
}
close(pipe_fd[0]);//关闭子进程读描述符
exit(0);
}
else if(pid>0)//如果父进程先运行
{
close(pipe_fd[0]);//关闭父进