红联Linux门户
Linux帮助

linux编程 管道

发布时间:2010-04-22 13:29:30来源:红联作者:suowenair
源程序
-------------------------
#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 \n");
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信号(写一个读端被关闭的管道)
请问大侠 什么情况????
为什么没子进程!?
文章评论

共有 5 条评论

  1. hujunhu 于 2010-05-01 22:54:27发表:

    开源连长是谁给我的名字啊啊???

  2. hujunhu 于 2010-05-01 22:53:46发表:

    谢谢啊,感谢一下

  3. hujunhu 于 2010-05-01 22:53:09发表:

    引用一下,写的还差不多

  4. suowenair 于 2010-04-27 17:58:00发表:

    2# deepwhite


    ......尴尬了!

  5. deepwhite 于 2010-04-22 16:00:14发表:

    fork返回值没有赋给pid.