-
Notifications
You must be signed in to change notification settings - Fork 231
/
ex10-10.c
36 lines (30 loc) · 1 KB
/
ex10-10.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
* 10.10
* 因为题目中暗示了只能插入代码 不能更改存在的代码
*/
#include "csapp.h"
int main(int argc, char **argv)
{
int n;
rio_t rio;
char buf[MAXLINE];
if (argc > 2) {
fprintf(stderr, "usage: %s [filename]\n", argv[0]);
return -1;
}
/* 这里将标准输入的文件描述符,重定位到输入文件的描述符 */
if (argc == 2) {
char *filename = argv[1];
int fd = Open(filename, O_RDONLY, 0);
int ret = dup2(fd, STDIN_FILENO); /* 将标准输入重定位到 fd */
if (ret < 0) {
perror("dup2");
return -1;
}
}
/* 没有输入文件名,将标准输入拷贝到标准输出 */
Rio_readinitb(&rio, STDIN_FILENO);
while ((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0)
Rio_writen(STDOUT_FILENO, buf, n);
return 0;
}