使用popen函数实现分页显示

来源:互联网 发布:乐视2手机网络时间不准 编辑:程序博客网 时间:2024/06/06 04:00
 
 
#include <fcntl.h>#include <stdio.h>#include "apue.h"#include <errno.h>#include <sys/wait.h>#include <sys/types.h>#include <unistd.h>#include <stropts.h>#include <sys/mman.h>#define PAGER "${PAGER:-more}"int main(int argc , char *argv[]){int n;char line[MAXLINE];FILE *fpin,*fpout;if(argc!=2)err_sys("input err");if((fpin=fopen(argv[1],"r"))<0)err_sys("fopen err");if((fpout=popen(PAGER,"w"))<0)err_sys("popen err");while(fgets(line,MAXLINE,fpin)!=NULL){n=strlen(line);if(fputs(line,fpout)==EOF)err_sys("fputs erro");}if(ferror(fpin))err_sys("fgets errr");if(pclose(fpout)<0)err_sys("pclose err");exit(0);}


对于popen(char *cmd,int char type)而言,其先定义一个管道pfd[],然后创建子进程,在子进程里面,当type为"r"的时候,使用pfd[0]为STDOUT_FILENO,返回fpout=pfd[1],这样在父进程里面向fpout里面写数据,则在子进程里面,相当于给起标准输入写东西,然后子进程读取这些输入,并调用bash程序执行第一个参数cmd

以上程序实现了分页显示。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头脑不清醒晕沉怎么办 一岁宝宝还不会走路怎么办 2岁宝宝受凉呕吐怎么办 3岁宝宝受凉呕吐怎么办 1岁宝宝受凉呕吐怎么办 3岁宝宝着凉呕吐怎么办 宝宝一进食就吐怎么办 宝宝吃什么都吐怎么办 一岁宝宝吃着了怎么办 宝宝吃了就吐怎么办 图书借阅证丢了怎么办 苹果6手机掌阅怎么办 厨房墙砖颜色深怎么办 炉石传说被盗号怎么办 炉石传说号忘了怎么办 手机丢失了微信怎么办 眼睛疼红血丝多怎么办 lol更新速度3kb怎么办 苹果6s玩游戏卡怎么办 微博手机号换了怎么办 微博字数超了怎么办 海外玩传奇很卡怎么办 再审期限超6个月怎么办 肠粉蒸出来太粘怎么办 微信订阅号没了怎么办 映美620k不进纸怎么办 属虎的带了貔貅怎么办 属龙的不能带金怎么办 这段时间运气不好怎么办 两年运气特别差怎么办 玩手机麻将老输怎么办 打四川麻将老输怎么办 网上打麻将老输怎么办 手机打麻将老输怎么办 近来打麻将老输怎么办 最近手气不好老输钱怎么办 头被风吹了头痛怎么办 打麻将老输怎么办转运 外出时家里的花怎么办 放假了家里的花怎么办 老是怀疑老婆有外遇怎么办