用dup2将标准输出重定向到一个打开的文件,稍后,恢复标准输出

先将标准输出做一个备份,然后进行dup2操作,最后可以再通过dup2将备份的复制回来。这样就行了,帮你在网上找了个范例,呵呵:)自己省得写了。  
  #include<unistd.h>    
  #include<stdlib.h>    
  #include<fcntl.h>    
  #include<sys/types.h>    
  #include<sys/stat.h>    
   
  int   main()    
  {    
  int   sfd,testfd;    
   
  testfd   =   open("temp",O_CREAT   |   O_RDWR   |   O_APPEND,0660);    
   
  if   (-1   ==   testfd)   {    
  printf("open   file   error./n");    
  exit(1);    
  }    
  printf("test1/n");  
  /*   先复制一个真实的文件描述符   */    
  //sfd   =   dup(testfd);  
  sfd=100;  
  /*   保存标准输出   */    
  if   (-1   ==   dup2(STDOUT_FILENO,sfd)   )   {    
  printf("can't   save   fd   /n");    
  exit(1);    
  }    
   
  /*   重定向   */    
  if   (-1   ==   dup2(testfd,STDOUT_FILENO)   )   {    
  printf("can't   redirect   fd   error/n");    
  exit(1);    
  }    
   
  printf("test2/n");  
  /*   此时向stdout写入应该输出到文件   */    
  write(STDOUT_FILENO,"file/n",5);    
   
  /*   恢复stdout   */    
  if   (-1   !=   dup2(sfd,STDOUT_FILENO)   )   {    
  printf("recover   fd   ok   /n");    
   
  /*   恢复后,写入stdout应该向屏幕输出   */    
  write(STDOUT_FILENO,"stdout/n",7);    
  }    
  printf("test3/n");  
  }    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值