首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

apue里的P501页的figure 15.6程序如何运行了没什么输出啊

2012-04-13 
apue里的P501页的figure 15.6程序怎么运行了没什么输出啊?C/C++ code#include apue.h#include sys/wait

apue里的P501页的figure 15.6程序怎么运行了没什么输出啊?

C/C++ code
#include <apue.h>#include <sys/wait.h>#define DEF_PAGER "/bin/more"int main(int argc,char * argv[]){    pid_t  pid;    char * argv0;    char * pager;        int n;    FILE * fp;    int fd[2];    char buffer[1024];    if(argc != 2)    {        printf("usage : ./15.6 pathname\n");        exit(0);    }    if((fp = fopen(argv[1],"r"))==NULL)    {        printf("can't open");    }    if(pipe(fd)<0)    {        printf("pipe error\n");    }    if((pid = fork())<0)    {        printf("fork error");    }    else if(pid > 0)    {        close(fd[0]);        while(fgets(buffer,sizeof(buffer),fp) != NULL)        {            n = strlen(buffer);            if(write(fd[1],buffer,n)!=n)            {                printf("write error");            }        }                if(ferror(fp))        {            printf("fgets error");        }        close(fd[1]);        sleep(1);        if(waitpid(pid,NULL,0)<0)        {            printf("wait error");        }        exit(0);    }    else    {        close(fd[1]);        if(fd[0] != STDIN_FILENO)        {            if(dup2(fd[0],STDIN_FILENO) != STDIN_FILENO)            {                printf("duplicate error");            }            close(fd[0]);                    }        else        {            if((pager = getenv("PAGER"))==NULL)            {                pager = DEF_PAGER;            }            if((argv0 = strrchr(pager,'/'))!=NULL)            {                argv0++;            }            else argv0 = pager;            if(execl(pager,argv0,(char *)0)<0)            {                printf("execute error\n");            }        }    }    exit(0);}


我的程序可执行文件为 15.6
运行 ./15.6 zhc.txt(不目录下的zhc.txt文件)应该有输出啊??这程序是不是用来在终端以pager分页的方式输出zhc.txt中的内容啊?
怎么运行完了终端没任何内容输出啊??哪里错了,知道的帮一下忙,感激不尽!!!

[解决办法]
close(fd[1]);
if(fd[0] != STDIN_FILENO)
{
if(dup2(fd[0],STDIN_FILENO) != STDIN_FILENO)
{
printf("duplicate error");
}
close(fd[0]);
}
else
{
下面这个else多余吧,应该无条件执行其中的语句

热点排行