unix父子进程间通信-无名管道
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #define MAXLINE 100
- char buf[MAXLINE];
- int main(int argc, char** agrv)
- {
- int pipefd[2];
- int ret;
- if(0 != pipe(pipefd))//创建管道
- {
- perror("pipe\n");
- exit(1);
- }
- //创建子程序
- if((ret=fork()) < 0)//创建失败
- {
- perror("fork\n");
- exit(1);
- }
- else if(ret == 0)//子程序
- {
- FILE* fp;
- close(pipefd[0]);//关闭管道可读端
- fp = fopen("./main.c","r"); //打开已存在可读文件
- if(NULL == fp)
- {
- perror("fopen\n");
- exit(1);
- }
- while(fgets(buf,MAXLINE,fp) != NULL)//将文件内容全部读入管道
- {
- int n = strlen(buf);
- if(n != write(pipefd[1],buf,n))
- {
- perror("write\n");
- exit(1);
- }
- }//end while
- if(ferror(fp))//在读的过程文件是否有报错
- {
- perror("ferror\n");
- exit(1);
- }
- close(pipefd[1]);//关闭文件可写端
- exit(0);//退出子程序
- }
- else
- {
- close(pipefd[1]);//关闭管道可写端
- if(-1 == wait(NULL))//等待子程序完全将文件内容读入到管道
- {
- perror("wait\n");
- exit(1);
- }
- if(dup2(pipefd[0],STDIN_FILENO) != STDIN_FILENO)//重新设置标准输入为管道可读端
- {
- perror("dup2\n");
- exit(1);
- }
- if(execl("/bin/more","more",(char*)0) < 0 )//分页程序 自动调用标准输入文件 显示管道内容
- {
- perror("execl\n");
- exit(1);
- }
- }
- return 0;
- }
创新互联专注于八宿企业网站建设,响应式网站建设,商城网站制作。八宿网站建设公司,为八宿等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
名称栏目:unix父子进程间通信-无名管道
浏览路径:http://lswzjz.com/article/ghhpeh.html