注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

UNIX dup2函数  

2015-05-01 19:02:45|  分类: UNIX网络编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

朋友们应该都熟悉重定向操作符>(大于号)吧,比如可以把一个命令的结果重定向到文件:

MdeMac-2:~ M$ ls -l > test.txt

这时test.txt文件内容就是在当前目录下文件列表了。

那么,在UNIX I/O重定向怎么操作呢?那就是用dup2函数了。

#include <unistd.h>

int dup2(int oldfd, int newfd);

dup2函数拷贝描述符表项oldfd到描述符表项newfd,覆盖newfd以前的内容;如果newfd已经打开了,dup2会在拷贝oldfd之前关闭newfd。其实这句话通速递理解就是,把newfd重定向到oldfd

来看例子:

#include <stdio.h> 

#include <unistd.h> 

#include <stdlib.h> 

#include <fcntl.h>

 

int main() 

    int oldfd, newfd; 

    char c; 

    /*mihooke.txt文件的内容是“mihooke”*/ 

    oldfd = open("mihooke.txt", O_RDONLY, 0); 

    newfd = open("mihooke.txt", O_RDONLY, 0); 

    read(newfd, &c, 1); 

    dup2(newfd, oldfd); 

    read(oldfd, &c, 1); 

    printf("c = %c\n", c); 

    exit(0); 

}

c变量的值不是'm',而是'i',原因是,dup2函数把oldfd重定向到newfd中去了,也就是说,下一条语句从oldfd充读取一个字符,便是再次从已打开的newfd中读取一个字符,也就是'i'。运行结果如下:

UNIX dup2函数 - mihooke - Mihooke blog

 

 

  评论这张
 
阅读(67)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017