dup和dup2函数
dup和dup2函数
dup
和dup2
用于复制文件描述符,通常用于重定向。
#include <unistd.h>int dup(int oldfd);
int dup2(int oldfd, int newfd);
dup
函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd
指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。
dup2
和dup
类似,不过它将返回第一个不小于newfd
的整数值的文件描述符,并且newfd
这个文件描述符也将会指向oldfd
指向的文件,原来的newfd
指向的文件将会被关闭(除非newfd
和oldfd
相同)。
dup
和dup2
系统调用失败时返回-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函数相关推荐
- linux文件重定向 dup,linux之dup和dup2函数解析
linux之dup和dup2函数解析 linux之dup和dup2函数解析 系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户 ...
- 九、Linux之dup和dup2函数
九.Linux之dup和dup2函数 目录: 九.Linux之dup和dup2函数 一.重定向 二.dup()函数原型(dup--duplicate) int dup(int oldfd); 三.du ...
- linux c——dup( )和dup2( )函数详解
dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下. 1. dup函数 头文件及函数定义: #include <unistd.h ...
- unix:dup与dup2函数详解
dup操作 功能:复制文件描述符,重定向输入输出. 函数: #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int ...
- linux之dup和dup2函数解析
理论介绍: 1. 文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从she ...
- linux存储--dup和dup2函数解析(十八)
1.文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...
- Linux的dup与dup2函数
dup函数 函数原型: int dup(int oldfd); 作用: 复制oldfd,返回新的文件描述符,这两个文件描述符执行相同的系统资源,而且新的文件描述符是操作系统给进程分配没有用到的数字最小 ...
- c语言 字符串dup,C语言中dup和dup2函数的不同和使用
在unix高级编程中有介绍dup和dup2,但是没有实例说明, 笔者自己结合实例进行了测试了解. 在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的 ...
- linux中dup2函数,Linux 下的 dup 和 dup2 函数简介
dup 和 dup2 都可以用来复制一个现存的文件描述符.经常用来重新定向进程的 STDIN, STDOUT, STDERR. dup 函数 dup 函数定义在 中,函数原形为: int dup ( ...
最新文章
- SAP EWM - 包装主数据 - 包装明细 -2
- CSS实现跨浏览器兼容性的盒阴影效果
- 云栖掠影|回首开源十年,RocketMQ 焕发新生
- C++ 中的this指针详解及实例
- Office Web Apps安装部署(二)
- 【带着canvas去流浪(15)】threejs fundamentals翻译系列1-scene graph
- android 切换主题介绍一
- 二级计算机选择题知识点资源,计算机省二级选择题.txt
- mes系统服务器连接失败,mes系统如何连接其他系统设备?
- MAC 下 excel 如何使用加载项(宏)
- 360插件化方案RePlugin学习笔记-外置插件
- Linux dd 硬盘克隆(硬盘拷贝)
- Macbook Pro(M1芯片)腾讯会议无法使用共享屏幕功能
- 软件测试怎么做?靠谱第三方软件测评公司有哪些?
- 二(1-苯基-异喹啉)(乙酰丙酮)合铱(III)
- Python【二手车价格预测案例】数据挖掘
- c语言new函数 百科,C语言函数—搜狗百科
- 计算机中丢失swr.dll,win10系统提示模块initpki.dll加载失败如何解决
- VBA 朗读excel随机选择的单元格 (语音库人声可选)
- JavaWeb 使用ajax上传文件并显示进度条等上传信息
热门文章
- MacOS 系统盘瘦身,对/System/Library开刀
- 非参数统计的Python实现——卡方独立性检验
- 群发“站内信”的实现
- 在微信小游戏中使用tensorflow的face-landmarks-detection
- 【自动驾驶】Frenet坐标系与Cartesian坐标系(一)
- 计算机领域的所有SCI一区期刊
- ERROR 2002 (HY000): Cant connect to local MySQL server through socket的解决方法
- 全连接网络实现Fashion数据集学习/预测
- 网点分布图怎么做,用地图制作客户分布图
- python snmp-cmds get示例