-------------------------
#include
#include
#include
#include
#include
#include
#include
#define DEF_PAGER "/bin/more"
#define BUFSIZE 30
#define oops(ch) {perror(ch);return -1;}
int main(int argc,char *argv[])
{
int filedes[2];
pid_t pid;
int rn,wn,fd;
char buf[BUFSIZE];
char *pager,*argvo;
if(argc<2)
{
printf("usage:./pipe_pagination0422
return -1;
}
if((fd=open(argv[1],O_RDONLY))==-1)
oops("open");
if(pipe(filedes)==-1)
oops("pipe");
if(fork()<0)
oops("fork");
if(pid>0)
{
close(filedes[0]);
while((rn=read(fd,buf,BUFSIZE))>0)
{
while(rn)
{
if((wn=write(filedes[1],buf,rn))!=rn)
rn-=wn;
}
if(wait(NULL)==-1)
oops("waitpid");
}
}
else if(pid==0)
{
close(filedes[1]);
if(filedes[0]!=STDIN_FILENO)
{
if(dup2(filedes[0],STDIN_FILENO)!=STDIN_FILENO)
oops("dup2");
close(filedes[0]);
}
if((pager=getenv("PAGER"))==NULL)
{
pager=DEF_PAGER;
}
if((argvo=strrchr(pager,'/'))==NULL)
{
argvo=pager;
}else
{
argvo++;
}
if(execl(pager,argvo,(char*)0)==-1)
oops("execl");
exit(1);
}
return 1;
}
------------------------
通过管道利用more进行分页
gdb 没有子进程和产生SIGPIPE信号(写一个读端被关闭的管道)
请问大侠 什么情况????
为什么没子进程!?


hujunhu 于 2010-05-01 22:54:27发表:
开源连长是谁给我的名字啊啊???
hujunhu 于 2010-05-01 22:53:46发表:
谢谢啊,感谢一下
hujunhu 于 2010-05-01 22:53:09发表:
引用一下,写的还差不多
suowenair 于 2010-04-27 17:58:00发表:
2# deepwhite
......尴尬了!
deepwhite 于 2010-04-22 16:00:14发表:
fork返回值没有赋给pid.