dup和dup2函数

dupdup2用于复制文件描述符,通常用于重定向。

#include <unistd.h>int dup(int oldfd);
int dup2(int oldfd, int newfd);

dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。

dup2dup类似,不过它将返回第一个不小于newfd的整数值的文件描述符,并且newfd这个文件描述符也将会指向oldfd指向的文件,原来的newfd指向的文件将会被关闭(除非newfdoldfd相同)。

dupdup2系统调用失败时返回-1并设置errno,成功就返回新的文件描述符。

注意:通过dup和dup2创建的文件描述符并不继承原文件描述符的属性,比如close-on-exec和non-blocking 等

dup简单,输入oldfd直接返回复制的文件描述符

#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
int main(int argc, char const *argv[])
{int fd = open("text.txt", O_RDWR | O_CREAT, 0666);assert(fd != -1);printf("fd = %d\n", fd);int fd2 = dup(fd);printf("fd2 = %d\n", fd2);char str[] = "hello ";write(fd, str, sizeof(str));char str2[] = "world\n";write(fd2, str2, sizeof(str2));close(fd);close(fd2);return 0;
}

dup2感觉复杂一些,其实dup2忽略第二个参数,功能是和dup一样的,除此之外dup2加了一个将返回第一个不小于newfd的整数值的文件描述符的功能,并且newfd也将指向oldfd指向的文件。

下面的代码调用dup2,文件描述符fd2原来指向"text2.txt"文件的,调用dup2后,fd2改为指向"text.txt"。

#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
int main(int argc, char const *argv[])
{int fd1 = open("text.txt", O_RDWR | O_CREAT, 0666);int fd2 = open("text2.txt", O_RDWR | O_CREAT, 0666);assert(fd1 != -1);assert(fd2 != -1);printf("fd1 = %d, fd2 = %d\n", fd1, fd2);int fd3 = dup2(fd1, fd2);printf("fd1 = %d,fd2 = %d,fd3 = %d\n", fd1, fd2, fd3);char str[] = "hello ";write(fd1, str, sizeof(str));char str2[] = "world\n";write(fd2, str2, sizeof(str2));char str2[] = " hello world\n";write(fd3, str2, sizeof(str2));close(fd1);close(fd2);close(fd3);return 0;
}

dup和dup2函数相关推荐

  1. linux文件重定向 dup,linux之dup和dup2函数解析

    linux之dup和dup2函数解析 linux之dup和dup2函数解析 系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户 ...

  2. 九、Linux之dup和dup2函数

    九.Linux之dup和dup2函数 目录: 九.Linux之dup和dup2函数 一.重定向 二.dup()函数原型(dup--duplicate) int dup(int oldfd); 三.du ...

  3. linux c——dup( )和dup2( )函数详解

    dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下. 1. dup函数 头文件及函数定义: #include <unistd.h ...

  4. unix:dup与dup2函数详解

    dup操作 功能:复制文件描述符,重定向输入输出. 函数: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int ...

  5. linux之dup和dup2函数解析

    理论介绍: 1. 文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从she ...

  6. linux存储--dup和dup2函数解析(十八)

    1.文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...

  7. Linux的dup与dup2函数

    dup函数 函数原型: int dup(int oldfd); 作用: 复制oldfd,返回新的文件描述符,这两个文件描述符执行相同的系统资源,而且新的文件描述符是操作系统给进程分配没有用到的数字最小 ...

  8. c语言 字符串dup,C语言中dup和dup2函数的不同和使用

    在unix高级编程中有介绍dup和dup2,但是没有实例说明, 笔者自己结合实例进行了测试了解. 在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的 ...

  9. linux中dup2函数,Linux 下的 dup 和 dup2 函数简介

    dup 和 dup2 都可以用来复制一个现存的文件描述符.经常用来重新定向进程的 STDIN, STDOUT, STDERR. dup 函数 dup 函数定义在 中,函数原形为: int dup ( ...

最新文章

  1. SAP EWM - 包装主数据 - 包装明细 -2
  2. CSS实现跨浏览器兼容性的盒阴影效果
  3. 云栖掠影|回首开源十年,RocketMQ 焕发新生
  4. C++ 中的this指针详解及实例
  5. Office Web Apps安装部署(二)
  6. 【带着canvas去流浪(15)】threejs fundamentals翻译系列1-scene graph
  7. android 切换主题介绍一
  8. 二级计算机选择题知识点资源,计算机省二级选择题.txt
  9. mes系统服务器连接失败,mes系统如何连接其他系统设备?
  10. MAC 下 excel 如何使用加载项(宏)
  11. 360插件化方案RePlugin学习笔记-外置插件
  12. Linux dd 硬盘克隆(硬盘拷贝)
  13. Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
  14. 软件测试怎么做?靠谱第三方软件测评公司有哪些?
  15. 二(1-苯基-异喹啉)(乙酰丙酮)合铱(III)
  16. Python【二手车价格预测案例】数据挖掘
  17. c语言new函数 百科,C语言函数—搜狗百科
  18. 计算机中丢失swr.dll,win10系统提示模块initpki.dll加载失败如何解决
  19. VBA 朗读excel随机选择的单元格 (语音库人声可选)
  20. JavaWeb 使用ajax上传文件并显示进度条等上传信息

热门文章

  1. MacOS 系统盘瘦身,对/System/Library开刀
  2. 非参数统计的Python实现——卡方独立性检验
  3. 群发“站内信”的实现
  4. 在微信小游戏中使用tensorflow的face-landmarks-detection
  5. 【自动驾驶】Frenet坐标系与Cartesian坐标系(一)
  6. 计算机领域的所有SCI一区期刊
  7. ERROR 2002 (HY000): Cant connect to local MySQL server through socket的解决方法
  8. 全连接网络实现Fashion数据集学习/预测
  9. 网点分布图怎么做,用地图制作客户分布图
  10. python snmp-cmds get示例