#include <errno.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<string.h>
#define DEF_PAGER "/bin/more"
#define MAXLINE 10
main(int argc,char * argv[]){
int n;
int fd[2];
pid_t pid;
char *pager, *argv0;
char line[MAXLINE];
FILE *fp;
if(argc!=2)
{
printf("error usage!\n");
exit(EXIT_FAILURE);
}
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("open");
exit(EXIT_FAILURE);
}
if(pipe(fd)<0)
{
perror("pipe");
exit(EXIT_FAILURE);
}
if((pid=fork())<0)
{
perror("fork");
exit(EXIT_FAILURE);
}
//父亲干的事情就是写管道
if(pid>0)
{
close(fd[0]);
//fgets每一次仅仅只读取一行
while(fgets(line,MAXLINE,fp)!=NULL)
{
n=strlen(line);
printf("%d\n",n);
if(write(fd[1],line,n)!=n)
{
perror("write");
exit(EXIT_FAILURE);
}
}
close(fd[1]);
if(waitpid(pid,NULL,0)<0)
{
perror("wait");
exit(EXIT_FAILURE);
}
exit(0);
}
else
{
close(fd[1]);
if(fd[0]!=STDIN_FILENO)//文件描述符,非否整数,表示的是正整数。
{
if(dup2(fd[0],STDIN_FILENO) != STDIN_FILENO)
{
perror("dup");
exit(EXIT_FAILURE);
}
close(fd[0]);
}
if((pager=getenv("PAGER"))==NULL)
pager=DEF_PAGER;
if((argv0=strrchr(pager,'/'))!=NULL)
argv0++;
else
argv0=pager;
if(execl(pager,argv0,(char*)0)<0)
{
perror("exec");
exit(EXIT_FAILURE);
}
exit(0);
}
}
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<string.h>
#define DEF_PAGER "/bin/more"
#define MAXLINE 10
main(int argc,char * argv[]){
int n;
int fd[2];
pid_t pid;
char *pager, *argv0;
char line[MAXLINE];
FILE *fp;
if(argc!=2)
{
printf("error usage!\n");
exit(EXIT_FAILURE);
}
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("open");
exit(EXIT_FAILURE);
}
if(pipe(fd)<0)
{
perror("pipe");
exit(EXIT_FAILURE);
}
if((pid=fork())<0)
{
perror("fork");
exit(EXIT_FAILURE);
}
//父亲干的事情就是写管道
if(pid>0)
{
close(fd[0]);
//fgets每一次仅仅只读取一行
while(fgets(line,MAXLINE,fp)!=NULL)
{
n=strlen(line);
printf("%d\n",n);
if(write(fd[1],line,n)!=n)
{
perror("write");
exit(EXIT_FAILURE);
}
}
close(fd[1]);
if(waitpid(pid,NULL,0)<0)
{
perror("wait");
exit(EXIT_FAILURE);
}
exit(0);
}
else
{
close(fd[1]);
if(fd[0]!=STDIN_FILENO)//文件描述符,非否整数,表示的是正整数。
{
if(dup2(fd[0],STDIN_FILENO) != STDIN_FILENO)
{
perror("dup");
exit(EXIT_FAILURE);
}
close(fd[0]);
}
if((pager=getenv("PAGER"))==NULL)
pager=DEF_PAGER;
if((argv0=strrchr(pager,'/'))!=NULL)
argv0++;
else
argv0=pager;
if(execl(pager,argv0,(char*)0)<0)
{
perror("exec");
exit(EXIT_FAILURE);
}
exit(0);
}
}