dup2 的作用不仅仅是复制文件描述符吗?
首先,我打开一个文件,然后使用 dup2 复制文件描述符。为什么当第一个文件描述符关闭时,我仍然可以通过另一个文件描述符读取该文件?
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd,fd2=7; /*7 can be any number < the max file desc*/
char buf[101];
if((fd = open(argv[1], O_RDONLY))<0) /*open a file*/
perror("open error");
dup2(fd,fd2); /*copy*/
close(fd);
if(read(fd2,buf,100)<0)
perror("read error");
printf("%s\n",buf);
return 0;
}
First, I open a file, then I use dup2
to copy the file descriptor. Why, when the first file descriptor is closed, can I still read the file through the other one?
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int fd,fd2=7; /*7 can be any number < the max file desc*/
char buf[101];
if((fd = open(argv[1], O_RDONLY))<0) /*open a file*/
perror("open error");
dup2(fd,fd2); /*copy*/
close(fd);
if(read(fd2,buf,100)<0)
perror("read error");
printf("%s\n",buf);
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
据猜测,实际的“打开文件描述”数据是引用计数的,因此当您复制文件描述符时发生的所有事情都是它引用的数据的计数增加。当您调用
close()
时,计数会递减。因此,关闭第一个描述符实际上并不会使第二个描述符无效。
At a guess, the actual "open file description" data is reference-counted, so that all that happens when you duplicate a file descriptor is that the count for the data it references is incremented. When you call
close()
, the count is decremented.Thus, your closing of the first descriptor doesn't actually render the second one invalid.