您的位置:首页 > 其它

dup&dup2函数的使用

2015-07-20 23:41 603 查看
dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。

#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);


如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体中,并且file结构体的引用计数是2。



如果两次open同一文件得到两个文件描述符,则每个描述符对应一个不同的file结构体,可以有不同的File Status Flag和读写位置。请注意区分这两种情况。



由dup返回的新文件描述符一定是当前可用文件描述符中的最小数值。对于dup2,可以用newfd参数指定新描述符的值。如果newfd已经打开,则先将其关闭。如若oldfd等于newfd,则dup2返回newfd,而不关闭它。

用dup和dup2实现重定向代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
int fd, save_fd;
char msg[] = "test file\n";

fd = open("somefile", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if (fd < 0) {
perror("open");
exit(1);
}

save_fd = dup(STDOUT_FILENO);
dup2(fd, STDOUT_FILENO);
close(fd);

write(STDOUT_FILENO, msg, strlen(msg));
dup2(save_fd, STDOUT_FILENO);

write(STDOUT_FILENO, msg, strlen(msg));
close(save_fd);

return 0;
}


运行结果:

cat@lenovo:~/Pro/linux_sys/0720/dup2$ ./a.out
test file
cat@lenovo:~/Pro/linux_sys/0720/dup2$ cat somefile
test file


过程分析:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: