重定向和静态库/动态库操作
重定向:
本质:
让我们的newfd文件描述符拷贝oldfd文件描述符,然后再关闭newfd, 标准输出拷贝tmpfile 指向新的struct file
标准输入, 标准输出, 标准错误各自所代表的struct file*都指向各自的struct file
现在我们打开一个文件tmpfile, 会自动创建一个struct file* 同样打开一个文件 struct file
将标准输入的内容重定向到我们的tmpfile当中, 让标准输出不要指向原来的struct file, 现在指向tmpfile的struct file, echo后就将内容写到了tmpfile
int dup2(int oldfd, int newfd) 重定向的
oldfd和newfd都是文件描述符
oldfd: 需要被拷贝的文件描述符
newfd: 需要被更改的文件描述符
将标准输出的内容重定向到tmpfile当中
fd = 1 fd = 3
1. newfd(标准输出)拷贝oldfd(tmpfile的文件描述符)
2. 关闭(newfd)标准输出
3. 当拷贝成功, 关闭newfd
4. 没有拷贝成功
4.1 如果拷贝的oldfd是一个无效的文件描述符, 则dup2什么都没有干, 切记: 没有关闭newfd
4.2 如果拷贝的oldfd是一个有效的文件描述符 但是要拷贝的newfd和oldfd具有相同的值, 则dup2同样什么都不干 也没有关闭newfd
// 将标准输出重定向到我们的tmpfile中去, 其实就是改变当前所保存的struct file地址, 拷贝的是文件描述符 -> 从而改变指向,
// 让newfd拷贝oldfd , 改变的是newfd
// int dup2(int oldfd, int newfd);
// 前面是old(tmpfile), 后面是new(标准输出)
// 需要被修改的是标准输出, 模板是tmpfile
echo "hehe" > tmpfile 是清空 重写 (相当