dup、dup2 函数
dup
和 dup2
都是用来复制一个文件的描述符;常用来重定向进程的 stdin、stdout 和 stderr。
头文件
函数原型
1 2
| int dup(int oldfd); int dup2(int oldfd, int targetfd);
|
返回值
1
| 返回一个新的描述符,这个新的描述符是传给它的描述符的拷贝。
|
功能
- 都是用来复制一个文件的描述符。
dup2
函数跟 dup 函数相似,但
dup2 函数允许调用者规定一个有效描述符和目标描述符的id 。
dup2` 函数成功返回时,目标描述符(dup2函数的第二个参数)将变成源描述符(dup2函数的
第一个参数)的复制品。换句话说,两个文件描述符现在都指向同一个文件,并且是函数第一
个参数指向的文件。
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <stdio.h> #include <stdlib.h> #include <unistd.h>
int main() { int pfds[2]; int fpid; if (0 != pipe(pfds)) { perror("创建管道失败:"); exit(EXIT_FAILURE); } fpid = fork(); if (0 == fpid) { close(STDOUT_FILENO); dup2(pfds[1], STDOUT_FILENO); close(pfds[0]); execlp("ls", "ls", "-l", NULL); } else { close(STDIN_FILENO); dup2(pfds[0], STDIN_FILENO); close(pfds[1]); execlp("wc", "wc", "-l", NULL); } return 0; }
|