csapp ch10.10 家庭作业

在这里插入图片描述
看到不能修改循环代码,只允许插入,猜测是需要重定向,剩下的问题是怎么处理infile参数,大致思路是判断argc是不是有这个参数,如果有打开文件得到fd,重定向0到fd
csapp ch10.10 家庭作业_第1张图片
代码

#include "csapp.h"

int main (int argc, char **argv) {
    int n;
    rio_t rio;
    char buf[MAXLINE];
    if (argc == 2) {
        int fd = open(argv[1], O_RDONLY);
        if (fd < 0) {
            printf("文件不存在: %s\n", argv[1]);
            exit(0);
        }
        dup2(fd, STDIN_FILENO);
    }
    Rio_readinitb(&rio, STDIN_FILENO);
    while((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0) {
        Rio_writen(STDOUT_FILENO, buf, n);
    }
}

运行结果
csapp ch10.10 家庭作业_第2张图片
增加的部分
csapp ch10.10 家庭作业_第3张图片

你可能感兴趣的:(csapp ch10.10 家庭作业)