dup重定向

dupdup2 系统调用用于复制文件描述符,是实现I/O重定向的核心机制。

dup 系统调用

  • 原型:int dup(int oldfd)
  • 复制 oldfd,返回当前最小可用的文件描述符,指向与 oldfd 相同的打开文件表条目。
  • 新旧描述符共享文件位置和状态。

dup2 系统调用

  • 原型:int dup2(int oldfd, int newfd)
  • 复制 oldfd 到指定的 newfd。若 newfd 已打开,先自动关闭。
  • 相比 dupdup2 更可控,是重定向操作的首选。

I/O重定向的实现: Shell实现 ls > output.txt 的步骤:

  1. open("output.txt", O_CREAT | O_TRUNC | O_RDWR) 打开(或创建)文件,获得描述符3。
  2. dup2(3, 1) 将描述符1(stdout)重定向到与描述符3相同的打开文件表条目。
  3. close(3) 关闭描述符3。
  4. 执行 ls 程序,其所有写向stdout的数据都进入文件。

原理:重定向改变的是描述符表项的指向,而非改变文件本身。进程不知情,仍按标准输出写入。

链接到