dup() 和 dup2()函数的介绍

转载 2013年12月05日 18:51:08

dup() 和 dup2()  

2011-10-07 11:06:31|  分类: Linux学习心得 |  标签:dup  dup2  linux  c   |字号 订阅

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

#include <unistd.h>
int dup(int newfd);
int dup2(int newfd, int oldfd);
     
下面用一个简单的例子解释两个函数的用法和区别:
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 int main(void)
 {
     int fd, save_fd;
     char msg[] = "This is a test of dup() & dup2()\n";
     int test;
     fd = open("somefile", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
     if(fd<0) {
         perror("open");
         exit(1);
     }
     save_fd = dup(STDOUT_FILENO);                        //运行后save_fd指向STDOUT——FILENO,即save_fd指向标准输出
     printf("save_fd=%d\n",save_fd);                             //测试用
     test=dup2(fd, STDOUT_FILENO);                         //运行后STDOUT_FILENO指向fd所指向的文件,即
STDOUT_FILENO指向somefile
     printf("dup2_1=%d\n",test);                                   //测试用 此时的标准输出不再指向显示器,因此该段测试将写入somefile文件中
     close(fd);
     write(STDOUT_FILENO, msg, strlen(msg));           //此时STDOUT_FILENO所指向的是somefile文件不再是标准输出流,因此
该段将
                                                                              //写入somefile文件中

     test=dup2(save_fd, STDOUT_FILENO);                 //运行后STDOUT_FILENO指向save_fd所指向的文件,即标准输出流
     printf("dup2_2=%d\n",test);                                  //测试用 此时标准输出流重新指回显示器,因此该段测试将写入显示器
     write(STDOUT_FILENO, msg, strlen(msg));           //此时STDOUT_FILENO所指向的便回标准输出流该段将写入显示器
     close(save_fd);
     return 0;
 }
该程序运行后显示器上显示的内容为:
[crosslandy@localhost PIPE]$ ./dup_example
save_fd=4
dup2_2=1
This is a test
somefile文件内的内容为:
dup2_1=1
This is a test

linux之dup和dup2函数解析

本文转载,原文地址:http://blog.csdn.net/fulinus/article/details/9669177#comments1、文件描述符在内核中数据结构  在具体说dup/dup2...
  • silent123go
  • silent123go
  • 2017年05月03日 11:27
  • 1829

重定向编程 dup和dup2函数

重定向编程 dup和dup2函数    函数dup和dup2提供了复制文件描述符的功能。他们通常用于stdin,stdout或进程的stderr的重定向。一般来说,普通输出函数(如:printf),...
  • u010006102
  • u010006102
  • 2014年09月29日 11:53
  • 1995

dup/dup2输出重定向

有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。 dup()与dup2()能对输入文件描述符进行重定向。 int dup(int oldfd); int dup2(int ...
  • fucangzxx
  • fucangzxx
  • 2016年07月28日 17:11
  • 2089

linux dup函数源码剖析

这是我新的专栏的第一篇,其实我这种水平的人还写专栏,实在是没有自知之明,夜郎自大。这个专栏只是希望起到一个抛砖引玉的作用,欢迎大家对我的文章多提宝贵的意见。 好了,先说说我为什么要写这样一个专栏,其实...
  • u012927281
  • u012927281
  • 2016年06月19日 10:07
  • 1369

dup和dup2的使用方法

/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/ #include #include #include //STDIN_FILENO标准输入描述符(0) //STD...
  • lurendetiankong
  • lurendetiankong
  • 2016年12月06日 15:16
  • 1438

使用dup和dup2重定向和还原

使用dup和dup2重定向和还原 源于开发一个应用将数据写的设备节点中,但是设备节点具有可变性,所以不在写死,而是先确定好,打开fd再将内容写进去,最终写入fd中的是一个开源程序,没有办法传递fd,不...
  • kangear
  • kangear
  • 2014年04月19日 11:12
  • 11191

dup,dup2函数的用法

linux下dup|dup2函数的用法 系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号)。dup2可以让用户指定返回的文件描述符的值,如果需要...
  • hittata
  • hittata
  • 2013年02月20日 17:26
  • 2573

dup()以及dup2()函数介绍

dup()以及dup2()函数介绍 dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。 这两个函数...
  • wpeng5641
  • wpeng5641
  • 2013年12月10日 22:04
  • 292

linux学习之十八---管道pipe&dup&dup2

1.管道的用法: 进程在使用fork函数创建子进程前先创建一个管道,该管道用于在父子进程间通信,然后创建子进程,之后父进程关闭管道的读端,子进程关闭管道的写端。父进程负责向管道写数据而子进程负责读数...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014年11月10日 15:25
  • 1522

dup和dup2函数介绍

//河中得上龙门去,不叹江湖岁月深。这一篇和操作系统提供的API接口库结合为The summary of IPC——pipe作准备 1.dup和dup2也是两个非常有用的调用,它们的作用都是用来复制...
  • derkampf
  • derkampf
  • 2017年03月12日 21:21
  • 134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dup() 和 dup2()函数的介绍
举报原因:
原因补充:

(最多只允许输入30个字)