版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}
运行结果
增加的部分