csapp ch10.10 家庭作业

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32768743/article/details/87515537

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

#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);
    }
}

运行结果
在这里插入图片描述
增加的部分
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32768743/article/details/87515537
今日推荐