关于dup2
2014-05-11 15:29
155 查看
关于dup2
dup2实现的是文件描述符fd所指向的文件表(实际操作的文件)的备份,例如dup(fd0,STDOUT_FILENO),这个操作实现的是将文件描述符STDOUT_FILENO所指向的文件表的内容修改成和fd0所指向的文件表的内容一样,所谓的做fd0所指向文件表的备份。这样呢,通过文件描述符STDOUT_FILENO所访问的文件表和通过文件描述符fd0所访问的文件表是一样的。但是系统有三个文件描述符比较特殊,那就是0,1,2三个文件描述符,分别对应STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO。在Unix中很多的库函数是依赖于这三个文件描述符来写的。例如标准输出函数printf,此函数默认访问的文件描述符是STDOUT_FILENO,但是它并不关心STDOUT_FILENO指向的文件表是哪儿。如果STDOUT_FILENO指向的文件表是控制终端,则通过printf打印的数据显示到了控制终端上。如果STDOUT_FILENO指向的文件表是普通的文件,则通过printf打印的数据写到了这个普通文件中。再如果STDOUT_FILENO指向的是socket,则通过printf打印的数据写到了socket所指向的通信端点并进行传递。总之,通过dup2(fd0,STDOUT_FILENO)能够改变printf类函数的输出方向,这也就是所谓的IO输出重定向。具体实例,可以补充。
dup2实现的是文件描述符fd所指向的文件表(实际操作的文件)的备份,例如dup(fd0,STDOUT_FILENO),这个操作实现的是将文件描述符STDOUT_FILENO所指向的文件表的内容修改成和fd0所指向的文件表的内容一样,所谓的做fd0所指向文件表的备份。这样呢,通过文件描述符STDOUT_FILENO所访问的文件表和通过文件描述符fd0所访问的文件表是一样的。但是系统有三个文件描述符比较特殊,那就是0,1,2三个文件描述符,分别对应STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO。在Unix中很多的库函数是依赖于这三个文件描述符来写的。例如标准输出函数printf,此函数默认访问的文件描述符是STDOUT_FILENO,但是它并不关心STDOUT_FILENO指向的文件表是哪儿。如果STDOUT_FILENO指向的文件表是控制终端,则通过printf打印的数据显示到了控制终端上。如果STDOUT_FILENO指向的文件表是普通的文件,则通过printf打印的数据写到了这个普通文件中。再如果STDOUT_FILENO指向的是socket,则通过printf打印的数据写到了socket所指向的通信端点并进行传递。总之,通过dup2(fd0,STDOUT_FILENO)能够改变printf类函数的输出方向,这也就是所谓的IO输出重定向。具体实例,可以补充。
相关文章推荐
- 关于dup2重定向STDOUT_FILENO之后的文件缓冲问题
- 一个关于dup、dup2 文件描述符重定向函数的程序
- 关于dup2函数
- 关于dup和dup2函数的重定向与还原
- 关于“愤青”,随便聊聊
- 关于23种设计模式的有趣见解
- 终于搞定关于Hibernte的Blob更新操作
- JavaScript关于window.open()应用
- 对关于字符驱动的一些重要数据结构(file_operations, file, inode, cdev)的理解
- 关于如何在iframe中设置背景颜色为透明
- 关于程序的反编译及重新编译(c#)
- 关于分析FAT12/16/32文件系统的实验(2)
- javascrpt:jquery的使用 关于 option ,append,attr,val()等的使用
- 关于Touch Dimond2的使用感受
- 关于我写的文章的声明
- 关于jsp文件中的编码知识
- 关于文本的编辑
- 关于struts2的自定义方法的支持
- 关于BGP的简要说明
- 关于oracle 锁的实际 解决方法