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");
}
调试下,两个进程是否通讯正常