您的位置:首页 > 编程语言 > C语言/C++

关于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输出重定向。具体实例,可以补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息