apue第15章15.6这个例子实验了一下,没有任何输出?怎么回事?

 int n, fd[2];
    pid_t pid;
    pipe(fd);
    FILE *fp;
    char *pager, *argv0;
    char buff[100];
    unsigned int nread;
    if ((fp = fopen(argv[1], "r")) < 0)
        printf("open error!\n");
    if ((pid = fork() < 0))
        printf("fork error!\n");
    else if (pid > 0)
    {
        close(fd[0]);
        while (fgets(buff, 100, fp) != NULL)
        {
            nread = strlen(buff);
            if (write(fd[1], buff, nread) != nread)
                printf("fputs error!\n");
        }
        close(fd[1]);
        waitpid(pid, NULL, 0);
    }
    else if (0 == pid)
    {
        close(fd[1]);
        if (fd[0] != STDIN_FILENO)
            if (dup2(fd[0], STDIN_FILENO) != STDIN_FILENO)
                printf("dupe error!\n");
        if ((pager = getenv("PAGER")) == NULL)
            pager = "/bin/more";
        if ((argv0 = strrchr(pager, '/')) != NULL)
            argv0++;
        else
            argv0 = pager;
        if (execl(pager, argv0, (char *)0) < 0)
            printf("execl error!\n");
    }

调试下,两个进程是否通讯正常