我在尝试理解 dup2
和 dup
的用法。
根据 man 手册:
DESCRIPTION
dup
和dup2
创建了文件描述符oldfd
的副本。成功返回后,旧和新的描述符可以互换使用。它们共享锁、文件位置指针和标志;例如,如果在其中一个描述符上使用lseek
修改文件位置,则也会为另一个描述符更改位置。然而,这两个描述符不共享 close-on-exec 标志。
dup
在新描述符中使用最低未使用编号的描述符。
dup2
使newfd
成为oldfd
的副本,必要时关闭newfd
。RETURN VALUE
dup
和dup2
返回新的描述符,如果发生错误则返回-1(此时,errno
会适当设置)。
我为什么需要这个系统调用呢?复制文件描述符有什么用处?如果我已经有了文件描述符,为什么还想要创建它的一个副本呢?能否给我解释并且举例说明何时需要使用 dup2
/dup
。
dup
或dup2
的情况下实现 shell 的管道功能?你需要调用pipe(2)
,然后将其中一个文件描述符dup
到例如STDIN_FILENO
。 - Basile Starynkevitch