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多余吧,应该无条件执行其中的语句