当前位置: 技术问答>linux和unix
关于dup2的一个问题
来源: 互联网 发布时间:2016-04-25
本文导语: fd=open( ); dup2(fd,STDOUT_FILENO); 系统会关掉STDOUT_FILENO,然后往标准输出写的东西都会重定向到fd所指向的文件,现在问题是,STDOUT_FILENO已经关掉了,怎么还能往标准输出写呢 不是在写数据都是根据文件描述符然后在进...
fd=open( );
dup2(fd,STDOUT_FILENO);
系统会关掉STDOUT_FILENO,然后往标准输出写的东西都会重定向到fd所指向的文件,现在问题是,STDOUT_FILENO已经关掉了,怎么还能往标准输出写呢
不是在写数据都是根据文件描述符然后在进程表里查找文件指针,然后找到文件表,然后读写的吗,是不是我理解错了啊,哪位可以讲解一些,越详细越好
dup2(fd,STDOUT_FILENO);
系统会关掉STDOUT_FILENO,然后往标准输出写的东西都会重定向到fd所指向的文件,现在问题是,STDOUT_FILENO已经关掉了,怎么还能往标准输出写呢
不是在写数据都是根据文件描述符然后在进程表里查找文件指针,然后找到文件表,然后读写的吗,是不是我理解错了啊,哪位可以讲解一些,越详细越好
|
STDOUT_FILENO是可以先被关闭!关闭之后,STDOUT_FILENO的值仍然是2. 只是你此时不能向其写入数据了!
你可以理解为,close其实就是将文件描述符(一个数字)和内核中具体的文件对象断开联系了!
当调用dup2(fd,STDOUT_FILENO); 之后,STDOUT_FILENO又“活”了,是fd的一份copy,你可以理解为在dup2()中为STDOUT_FILENO和fd对应的内核文件对象建立起了联系。此时,在内核中,fd和STDOUT_FILENO对应的文件对象是同一个!
good luck!
你可以理解为,close其实就是将文件描述符(一个数字)和内核中具体的文件对象断开联系了!
当调用dup2(fd,STDOUT_FILENO); 之后,STDOUT_FILENO又“活”了,是fd的一份copy,你可以理解为在dup2()中为STDOUT_FILENO和fd对应的内核文件对象建立起了联系。此时,在内核中,fd和STDOUT_FILENO对应的文件对象是同一个!
good luck!