Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349757
  • 博文数量: 63
  • 博客积分: 1412
  • 博客等级: 中尉
  • 技术积分: 648
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 23:07
文章分类

全部博文(63)

文章存档

2012年(42)

2011年(21)

我的朋友

分类: C/C++

2012-04-05 13:40:29

#include
int dup2(int oldfd, int newfd);
 
The error returned by dup2() is different from that returned  by  fcntl(...,  F_DUPFD,  ...)   when newfd is out of range.  On some systems dup2() also sometimes returns EINVAL like F_DUPFD.
 
If  newfd  was open, any errors that would have been reported at close(2) time are lost.  A careful programmer will not use dup2() or dup3() without closing newfd first.
 
dup2函数的作用就是文件描述符重定向的作用。
例如下面的程序:将stdout重定向到一个指定的文件描述符中。

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <fcntl.h>
  7. #include <unistd.h>

  8. using namespace std;

  9. int main()
  10. {
  11.         FILE *fp = NULL;
  12.         int fd1;
  13.         fprintf( stdout, "[%d]dup2 test\n", __LINE__ );

  14.         fd1 = open( "dup2.txt", (O_RDWR), 0644 );
  15.         if( fp < 0 )
  16.         {
  17.                 printf( "[%d]fopen error=[%s]\n", __LINE__, strerror(errno) );
  18.                 return 1;
  19.         }

  20.         if( dup2( fd1, 1 ) < 0 )
  21.         {
  22.                 printf( "[%d]dup2 error=[%s]\n", __LINE__, strerror(errno) );
  23.         }
  24.         close( fd1 );

  25.         fprintf( stdout, "[%d]dup2 test\n", __LINE__ );
  26.         fprintf( stdout, "[%d]dup2 test\n", __LINE__ );
  27. }
  28. ~

也可参考如下文章。


阅读(1397) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~