unix父子进程间通信-无名管道-创新互联
创新互联公司是一家专业提供瑞安企业网站建设,专注与成都网站建设、网站制作、html5、小程序制作等业务。10年已为瑞安众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
- #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;
- }
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:unix父子进程间通信-无名管道-创新互联
本文URL:http://ybzwz.com/article/doipgh.html