1.重定向
文件描述符对应的分配规则是什么?
尝试用这个代码 关闭0,1,2文件描述符,看看有什么现象?关闭哪个,你打开的文件fd应该就是哪个
结论:
从0下标开始,寻找最小的没有没使用的数组位置,它的下标就是新文件的文件描述符
如果先关闭1,再打开log.txt,那么根据文件描述符分配规则,新打开的文件被分配到了下标1
此时write不管就往1号下标里面写入,则此时现象就是本来应该向显示器文件写出,但现在是往文件log里面写
这就是重定向的原理,但是这样做太挫了
我们可以利用系统调用dup2来复制文件描述符表数组中下标对应的内容
dup2的接口形参设计的不好,和我们认为的新旧正好相反,但是有了这句 newfd be the copy of oldfd,new是old的拷贝,则得出最后只剩一个oldfd
按照重定向结果,最后一定只剩fd这个新打开的地址,则oldfd 传 fd , newfd 传 1,这样也完成了重定向 >。
代码:
追加重定向 >>
输入重定向:
系统调用read
本来read(0,…) 应该从键盘读入,现在从文件里面读入
重定向的本质:
对进程的指定文件描述符表进行内核级别的对文件描述符表中的地址进行拷贝的问题
这就叫输入输出重定向