dup函数
函数原型:
int dup(int oldfd);
作用:
复制oldfd
,返回新的文件描述符,这两个文件描述符执行相同的系统资源,而且新的文件描述符是操作系统给进程分配没有用到的数字最小的那个。
注意:这个复制操作,不会复制有关的文件描述符标志,比如说CLOSE_ONEXEC
等。
代码实例:
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
void print_inode(int fd) {
struct stat info;
if (fstat(fd, &info) != 0) {
//fprintf(stderr, "fstat() error for fd %d: %s", fd, strerror(errno));
perror("fstat() error\n");
} else {
printf("The inode of fd %d is %d\n", fd, (int)info.st_ino);
}
}
int main() {
int fd;
if ((fd = dup(0)) < 0) {
perror("dup() error\n");
} else {
print_inode(0);
print_inode(fd);
close(fd);
}
return 0;
}
/*
The inode of fd 0 is 3
The inode of fd 3 is 3
*/
dup2函数
函数原型
int dup2(int oldfd, int newfd);
作用同上,不过是把复制后的fd赋值给newfd,也不能复制文件描述的标记。
两者失败都会返回-1