dup重定向
dup 和 dup2 系统调用用于复制文件描述符,是实现I/O重定向的核心机制。
dup 系统调用:
- 原型:
int dup(int oldfd) - 复制
oldfd,返回当前最小可用的文件描述符,指向与oldfd相同的打开文件表条目。 - 新旧描述符共享文件位置和状态。
dup2 系统调用:
- 原型:
int dup2(int oldfd, int newfd) - 复制
oldfd到指定的newfd。若newfd已打开,先自动关闭。 - 相比
dup,dup2更可控,是重定向操作的首选。
I/O重定向的实现:
Shell实现 ls > output.txt 的步骤:
open("output.txt", O_CREAT | O_TRUNC | O_RDWR)打开(或创建)文件,获得描述符3。dup2(3, 1)将描述符1(stdout)重定向到与描述符3相同的打开文件表条目。close(3)关闭描述符3。- 执行
ls程序,其所有写向stdout的数据都进入文件。
原理:重定向改变的是描述符表项的指向,而非改变文件本身。进程不知情,仍按标准输出写入。
链接到
- 上一个知识点:10.11 原子性与竞争
- 下一个知识点:10.13 标准I_O库