Chinaunix首页 | 论坛 | 博客
  • 博客访问: 376463
  • 博文数量: 48
  • 博客积分: 743
  • 博客等级: 上士
  • 技术积分: 956
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-22 13:51
文章分类

全部博文(48)

文章存档

2015年(3)

2014年(17)

2012年(23)

2011年(5)

分类: C/C++

2014-04-14 10:57:30

函数原型:

  1. #include

    int dup(int oldfd);
    int dup2(int oldfd, int newfd);

参数:

dup:
输入: oldfd -- 现存的文件描述符
输出:无 

dup2 
输入: oldfd -- 现存的文件描述符  newfd -- 复制到的文件描述符
输出:无

返回值成功 : 新的文件描述符 失败 :-1 并设置errno

函数功能说明:

  dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。   dup:复制一个现存的文件描述符oldfd,返回一个新的文件描述符
  dup2:复制oldfd文件描述符到newfd
	
	
		
		
		
		
		

例:
  1. #include <unistd.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8.  int main(void)
  9.  {
  10.      int fd, save_fd;
  11.      char msg[] = "This is a test of dup() & dup2()\n";
  12.      int test;
  13.      fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
  14.      if(fd<0) {
  15.          perror("open");
  16.          exit(1);
  17.      }
  18.      save_fd = dup(STDOUT_FILENO); //运行后save_fd指向STDOUT_FILENO,即save_fd指向标准输出
  19.      printf("save_fd=%d\n",save_fd); //测试用
  20.      test=dup2(fd, STDOUT_FILENO); //运行后STDOUT_FILENO指向fd所指向的文件,即STDOUT_FILENO指向somefile
  21.      printf("dup2_1=%d\n",test); //测试用 此时的标准输出不再指向显示器,因此该段测试将写入somefile文件中
  22.      close(fd);
  23.      write(STDOUT_FILENO, msg, strlen(msg)); //此时STDOUT_FILENO所指向的是somefile文件不再是标准输出流,因此该段将
  24.                                                                               //写入somefile文件中
  25.      test=dup2(save_fd, STDOUT_FILENO); //运行后STDOUT_FILENO指向save_fd所指向的文件,即标准输出流
  26.      printf("dup2_2=%d\n",test); //测试用 此时标准输出流重新指回显示器,因此该段测试将写入显示器
  27.      write(STDOUT_FILENO, msg, strlen(msg)); //此时STDOUT_FILENO所指向的便回标准输出流该段将写入显示器
  28.      close(save_fd);
  29.      return 0;
  30.  }

编译并运行
[
linux@localhost daemon]$ gcc -o dup_test dup_test.c
[
linux@localhost daemon]$ ./dup_test
save_fd=4

dup2_2=1
This is a test of dup() & dup2()

somefile文件内的内容为:
dup2_1=1
This is a test
of dup() & dup2()
阅读(1510) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~