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

liuyue18301的个人主页

追逐梦想 光辉岁月

 
 
 

日志

 
 

彻底理解dup(...)和dup2(...)这两个函数的作用  

2009-12-29 16:42:54|  分类: 嵌入式linux开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

彻底理解dup(...)和dup2(...)这两个函数的作用

 

//dup函数的作用:复制一个现有的句柄,产生一个与“源句柄特性”完全一样的新句柄(也即生成一个新的句柄号,并关联到同一个设备)

//dup2函数的作用:复制一个现有的句柄到另一个句柄上,目标句柄的特性与“源句柄特性”完全一样(也即首先关闭目标句柄,与设备断连,接着从源句柄完全拷贝复制到目标句柄)

//dup和dup2都是系统服务,window平台对应DuplicateHandle函数

/* DUP.C: This program uses the variable old to save * the original stdout. It then opens a new file named * new and forces stdout to refer to it. Finally, it * restores stdout to its original state. */#i nclude <io.h>#i nclude <stdlib.h>#i nclude <stdio.h>void main( void ){ int old; FILE *new; old = _dup( 1 ); /* "old" now refers to "stdout" */ /* Note: file handle 1 == "stdout" */ if( old == -1 ) { perror( "_dup( 1 ) failure" ); exit( 1 ); } write( old, "This goes to stdout first\r\n", 27 ); if( ( new = fopen( "data", "w" ) ) == NULL ) { puts( "Can't open file 'data'\n" ); exit( 1 ); } /* stdout now refers to file "data" */ if( -1 == _dup2( _fileno( new ), 1 ) ) { perror( "Can't _dup2 stdout" ); exit( 1 ); } puts( "This goes to file 'data'\r\n" ); /* Flush stdout stream buffer so it goes to correct file */ fflush( stdout ); fclose( new ); /* Restore original stdout */ _dup2( old, 1 ); puts( "This goes to stdout\n" ); puts( "The file 'data' contains:" ); system( "type data" );}

Output

This goes to stdout firstThis goes to file 'data'This goes to stdoutThe file 'data' contains:This goes to file 'data'

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

历史上的今天

评论

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

页脚

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