dup和dup2函数

article/2025/10/1 11:14:29

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;
}

image-20220815171158327

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

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

image-20220815173243219

#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;
}

image-20220815173321291


http://chatgpt.dhexx.cn/article/dXVMATbm.shtml

相关文章

重定向(dup、dup2、dup3)--Linux

文章目录 &#x1f6a9;重定向是什么&#xff1f;&#x1f6a9;dup系列函数实现重定向&#x1f341;dup&#x1f341;dup2&#x1f341;dup3 &#x1f6a9;总结 &#x1f6a9;重定向是什么&#xff1f; 在上篇博客[文件描述符]中我曾提到了一个有意思的证明&#xff1a;进程在…

协议篇————3、DUP协议详解

一、UDP协议简介 UDP是OSI模型中一种无连接的传输层协议&#xff0c;它主要用于不要求分组顺序到达的传输中&#xff0c;分组传输顺序的检查与排序由应用层完成&#xff0c;提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是 IP协议与上层协议的接口。UDP协议适用端口分…

8086汇编语言dup指令学习

dup是duplicate的缩写&#xff0c;重复的意思&#xff1b; 用来定义重复的字节、字、双字、结构等内存缓冲区&#xff1b; db x dup()&#xff0c;x是重复的次数&#xff0c;&#xff08;&#xff09;里是要重复的数&#xff0c;逗号分隔&#xff1b; db 重复的次数 dup &…

文件描述符的复制(dup)

1.dup和dup2函数的介绍 int dup(int oldfd); 返回一个文件描述符&#xff0c;参数是要复制的那个文件描述符。2.使用dup进行文件描述符的复制 &#xff08;1&#xff09;dup系统调用对fd进行复制&#xff0c;会返回一个新的文件描述符&#xff0c;&#xff08;譬如原来的是3&a…

java面试题库app

java面试题库app是一款专为正在找工作的java程序员打造的软件&#xff0c;这款软件集合了精选的Java面试笔试题目及答案&#xff0c;致力于帮助用户通过面试和笔试&#xff0c;有需要的朋友快来下载吧。 java面试题库app特色 1、java基础(全面的java基础面试题&#xff0c;jav…

java-题库

java-题库 一、hashMap的底层实现1.1、hashMap概述1.2、JDK1.7-扩容源码1.3、JDK1.7链表迁移过程1.4、JDK1.8下的扩容机制 二、java面向对象的三大特征三、JVM相关四、集合相关五、JDK1.8新特性5.1、接口内可以添加非抽象的方法实现5.2、Lambda表达式5.3、函数式接口5.4、Strea…

Java二级考试题库

1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 27、 注意&#xff1a;&#xff08;1&#xff09;基本型数据变量传递的是数值&#xff0c;修改会直接影响数据&#xff1b;而引用型变量传递的是…

java基础_题库详解

删除线格式 # 1 JDK和JRE有什么区别&#xff1f; JRE&#xff1a;Java Runtime Environment&#xff08; java 运行时环境&#xff09;。即java程序的运行时环境&#xff0c;包含了 java 虚拟机&#xff0c;java基础类库。 JDK&#xff1a;Java Development Kit&#xff08; ja…

Java笔试题

随机从1到100000中间随机取出100个不同的质数&#xff0c;然后按从小到大的顺序排列 public class IsPrime { //工具类// 输入一个数,判断是否为质数,费时方法public static Integer isPrime(int num) {if (num 0 || num 1)return -1;for (int i 2; i < num - 1; i) {if …

Java期末题库

根据如下图所示数据库信息&#xff0c;完成1-3小题。 &#xff08;1&#xff09;使用JDBC数据库连接技术&#xff0c;编写JDBCUtil工具类&#xff0c;在该类中定义getCon方法用于获得与数据库的连接对象&#xff0c;定义closeAll方法用于释放连接对象等资源。 import java.sql…

2022史上最全java面试题题库大全800题含答案

2022史上最全java面试题题库大全800题含答案 1、 meta标签的作用是什么 2、 ReenTrantLock可重入锁&#xff08;和synchronized的区别&#xff09;总结 3、 Spring中的自动装配有哪些限制&#xff1f; 4、 什么是可变参数&#xff1f; 5、 什么是领域模型(domain model)&#…

全国计算机等级考试——二级JAVA完整大题题库【五十三道】

全国计算机等级考试二级 JAVA 题目内容 编写于2023.04.10 分为40道选择题和3道大题&#xff08;大题是程序填空类型&#xff09; 其中选择题只能进去做一次&#xff0c;一旦退出来则不可再进&#xff08;注意&#xff01;&#xff09;。大题可以重复进入&#xff0c;重复做。…

java面试题题库大全800题

1、 meta标签的作用是什么 2、 ReenTrantLock可重入锁&#xff08;和synchronized的区别&#xff09;总结 3、 Spring中的自动装配有哪些限制&#xff1f; 4、 什么是可变参数&#xff1f; 5、 什么是领域模型(domain model)&#xff1f;贫血模型(anaemic domain model)和充血模…

Java基础习题库

Java基础习题库 目录 Java基础习题库 一、Java基础之概述 1.JDK,JRE,JVM三者之间的关系&#xff0c;以及JDK、JRE包含的主要结构有哪些 2.为什么要配置path环境变量&#xff1f;如何配置&#xff1f; 3.创建如下的类&#xff0c;使得运行的话可以输出&#xff1a; 4.编译…

Javase MINA框架

MINA是一个基于TCP/IP通信的JAVA框架&#xff0c;MINA可以帮助我们快速开发高性能、高扩展的网络通信应用&#xff0c;提供了事件驱动、异步操作的编程模型&#xff0c;默认使用NIO作为底层支持 客户端实现步骤&#xff1a;

基于Java后台(Springboot框架)+前端小程序(MINA框架)+Mysql数据库的疫苗预约小程序系统设计与实现

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序疫苗预约系统&#xff0c;前台用户使用小程序&#xff0c;后台管理使用基JAVAMySql技术&#xff1b;通过后台添加疫苗内容、价格、开放预约的日期和时间段&#xff0c;用户通过小程序登录&…

Spring Boot Starter之Mina框架封装

封装目的 目前是将Mina与Springboot的自动装配然后结合自身公司的业务对Mina进行统一的封装&#xff0c;目的是让代码可读性提高&#xff0c;也跟加便于使用&#xff0c;不用再写重复的代码 功能介绍 实现功能&#xff1a;可以通过注解的方式自动配置Mina服务端相关的代码 …

java mina 框架 获取字节_浅谈Java的Mina框架传递对象

接触java的Mina框架已经有很多时间了&#xff0c;在网上也读过了很多的相关文章&#xff0c;发现Mina框架的确是一个值得拿来好好研究的东西&#xff0c;前些日子写了一个山寨QQ项目&#xff0c;其中的通信部分用到了java中自带的InputStream&#xff0c;OutputStream&#xff…

Java网络编程之MINA框架(1)

1、MINA&#xff1a; 一个简洁易用的基于TCP/IP通信的JAVA框架 2、下载地址&#xff1a; http://mina.apache.org/downloads-mina_2_0.html 3、至少需要&#xff1a; (在下载的文件中找以下两个jar包导入工程中) mina-core-2.0.21.jar、slf4j-api-1.7.26.jar 4、开发一个Mina应…

浅谈Mina框架

一、简介 Apache Mina Server 是一个网络通信应用框架&#xff0c;也就是说&#xff0c; 也可以提供JAVA对象的序列化服务、虚拟机管道通信服务等&#xff09;&#xff0c;Mina可以帮助我们快速开发高性能、高扩展性的网络通信应用&#xff0c;Mina提供了事件驱动、异步&#…