使用popen函数实现分页显示

 
 
#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

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

你可能感兴趣的:(cmd,File,null,bash,input,include)