UNIX系统中dup和dup2系统调用及简易shell实现
1. dup和dup2系统调用概述
在UNIX系统里,有时我们希望管道能返回特定的文件描述符,比如在 pfd 数组中,读取端为0,写入端为1,但 pipe 函数并不具备这样的功能。若在调用 pipe 前关闭0和1以使其可用,这种做法并不安全,因为标准并未明确规定管道两端对应的文件描述符,而且通常我们也不能为了创建管道而牺牲标准输入和输出。这时,就可以使用 dup 或 dup2 系统调用。
2. dup和dup2函数介绍
- dup函数
#include <unistd.h>
int dup(
int fd
/* file descriptor to duplicate */
);
/* Returns new file descriptor or -1 on error (sets errno) */
dup 函数用于复制一个现有的文件描述符,返回一个新的文件描述符,该描述符指向同一个文件(或管道等)。这两个文件描述符共享相同的文件描述信息。如果参数无效(未打开)或者没有可用的文件描述符,调用将失败。 dup 函数会选取编号最小的可用文件描述符,所以若知道哪些文件描述符是打开的,就能控制其返回值。
-
超级会员免费看
订阅专栏 解锁全文
534

被折叠的 条评论
为什么被折叠?



