写一个与dup2()功能相同的函数

重定向dup2()函数 重定向stdin stdout stderr dup()   dup2()都是用于重定向 dup函数的作用:复制一个现有的句柄,产生一个与“源句柄特性”完全一样的新句柄(也即生成一个新的句柄号,并关联到同一个设备)dup2函数的作用:复制一个现有的句柄到另一个句柄上,目标句柄的特性与“源句柄特性”完全一样(也即首先关闭目标句柄,与设备断连#include #include 阅读详情
//用dup()来返回文件描述符,直到符合要求的为止,最后再把不符合要求的关闭
//2013年 06月 19日 星期三 06:23:38 HKT
//当输入的描述符是负的或者已超过MAX_OPEN时,会出错
#include <unistd.h>//dup()
#include <stdio.h>
#include <stdlib.h>
#define OPEN_MAX 256
int my_dup2(int, int);
int main(int argc, char *argv[])
{
	int newfd, return_fd;
	if(argc != 2)
	{
		printf("格式:./a.out test.txt\n");
		exit(0);
	}
	printf("请输入你要设置复制的描述符: ");
	scanf("%d", &newfd);
	//打开一个文件
	int fd = open(argv[1], 0);//打开一个文件准备复制
	if(fd == -1)
	{
		perror(argv[1]);//打印错误信息
		exit(0);
	}
	printf("原来的文件描述符是: %d\n", fd);
	return_fd = my_dup2(fd, newfd);
	printf("之后的文件描述符是: %d\n");
        close(fd);
        close(return_fd);
        exit(0);
}
int my_dup2(int fd, int newfd)
{
	int count = 0;
	int fdarry[newfd];	//记录打开的描述符
	if(newfd < 0 || newfd > OPEN_MAX)
	{
		printf("你设置的新描述符有误!\n");
		exit(0);
	}

	if((fdarry[count] = dup(fd)) == -1)//返回当前最小未用的文件描述符
	{
		printf("dup()函数出错!\n");
		exit(0);
	}
	else//的是为了测试原文件描述符是否可用
	{
		close(fdarry[count]);	
	}
	if(fd == newfd)//如果新设置的与原来的相等则直接接返回原来的
	{
		return fd;
	}
	close(newfd);//关闭要复制的文件描述符
	//当运行下面的代码时说明用户设置的文件描述符与一开始的并不相同
	for(count = 0; count <= newfd; count++)
	{
		fdarry[count] = dup(fd);//返回当前可用的最小文件描述符
		if(fdarry[count] == -1)
		{
			printf("dup()出错!\n");
			exit(0);
		}
		else
		{
			printf("for里面的描述符为: %d\n", fdarry[count]);
			if(fdarry[count] == newfd)
				break;
		}
	}
	for(count = 0; count <= newfd; count++)
	{
		if(fdarry[count] == newfd)
			return fdarry[count];
		else
			close(fdarry[count]);	
	}
}


原子操作与程序中的重定向: dup()与dup2()函数 阅读详情

相关推荐

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 357

文件描述符复制函数dup2()详解

dup2()是dup()的“升级版“,原型是int dup2(int oldfd, int newfd),作用是让文件描述符newfd与oldfd所关联的文件(或缓冲区或管道或共享内存等)关联起来,如果一开始newfd已经和某个文件关联了(一个描述符同一时刻只能关联一个文件),那它会先解除newfd和某个文件的关联,然后再关联oldfd关联的那个文件。下面就拿文件描述符0,1做参数来写两个例子。 ...

m0_37829435的博客 2163

LobeHub开源AI应用平台:从部署到定制的全栈实践指南

在现代AI应用开发领域,大语言模型(LLM)的集成与部署是核心技术挑战之一。其原理在于通过API或本地化部署,将预训练模型的强大能力封装为可调用的服务。这项技术的核心价值在于极大地降低了AI应用的开发门槛,使开发者能够快速构建智能对话、内容生成等场景的应用。随着模型即服务(MaaS)模式的普及,一个关键痛点是如何高效地管理多模型、设计友好的用户界面并实现功能扩展。这正是开源项目LobeHub所聚焦的领域,它通过提供可插拔的架构和配置驱动的低代码理念,解决了AI能力落地的“最后一公里”问题。本文将结合Dock

weixin_27210125的博客 751

复制文件描述符(dup、dup2函数) 和 文件共享

所谓文件共享指的是同一个文件(譬如磁盘上的同一个文件,对应同一个 inode)被多个独立的读写体同时进行 IO 操作。多个独立的读写体大家可以将其简单地理解为对应于同一个文件的多个不同的文件描述符,譬如多次打开同一个文件所得到的多个不同的 fd,或使用 dup()(或 dup2)函数复制得到的多个不同的 fd 等。

Bit_Dong的博客 1694

脑机接口技术介绍、应用与挑战

脑机接口的概念最先于1973年提出,伴随着计算机性能的飞速提高,在美国“人类脑计划”的资金支持下,脑机接口的研究进入了高速发展期。去年年末,我国科技部会议透露:中国将拿出540亿元,推进中国脑计划的发展。同时,这一举措也推动了我国脑机接口的研究发展。 脑机接口属于多学科交叉科技,涉及神经科学、计算机科学、认知科学、控制与信息科学技术、医学等多个学科。技术实现方式是通过信号采集设备从大脑皮层采集脑电信号,经过放大、滤波、A/D转换等处理,转换为可以被计算机识别的信号,然后对信号进行预处理,提取特征信号,再利

weixin_44603934的博客 9132

Computers & Security 投稿实战:从零到一详解避坑指南

本文详细解析了向《Computers & Security》投稿的全流程避坑指南,包括ORCID账号注册、文件格式统一、Editorial Manager®系统操作技巧等关键步骤。特别强调了cover letter撰写、Declaration of Interest Statement准备以及PDF生成后的检查要点,帮助研究者高效完成投稿流程。

weixin_29228203的博客 674

文件操作(五)—— 文件重定向(dup2)

文件操作(五)—— 文件重定向(dup2)

challenglistic的博客 5200

特征图与token的区别以及两者之间的转换

特征图和token之间的联系以及两者之间的转换

mariodf的博客 1012

dup/dup2函数

#include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd);   当调用dup函数时,内核在进程中创建一个新的文件描述符,此描述符是当前可用文件描述符的最小数值,这个文件描述符指向oldfd所拥有的文件表项。   dup2和dup的区别就是可以用newfd参数指定新描述符的数值,如果newfd已经打开,则先将其关闭。如果newfd等于oldfd,则dup2返回newfd, 而不关闭它。dup2函数返回的新文件描述

$好记性还是要多记录$ 3296

linux安装配置Mysql详细步骤

下载Mysql rpm包 官网下载:https://dev.mysql.com/downloads/mysql/ 如果你到了这里,本地应该有了如下四个rpm包: mysql-community-client-5.7.26-1.el6.x86_64.rpm mysql-community-common-5.7.26-1.el6.x86_64.rpm mysql-community-libs-5...

🏆 前端领域优质创作者 7万+

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 506

dup2()实现重定向

函数返回一个整数值,表示复制后的文件描述符。如果复制成功,则返回新的文件描述符;如果出现错误,则返回 -1,并设置相应的错误码。函数创建或打开一个名为 "output.txt" 的文件,并获得一个文件描述符。函数通常与文件操作和进程间通信等场景配合使用,以实现文件描述符的重定向或复制。函数是一个系统调用,用于复制文件描述符,并将其关联到指定的文件描述符。这样,所有后续的标准输出将写入到 "output.txt" 文件中。已经打开,则先关闭它,然后再进行复制操作。函数将标准输出的文件描述符。

tiffany_263的博客 872

零基础入门篇③ PyCharm使用指南(个性化设置、开发必备插件、常用快捷键)

Python从入门到精通👉零基础入门篇③

hacker707的博客 4374

浅析dup()和dup2()函数

前言   在linux下,一切皆文件。当文件被打开时,会返回文件描述符用于操作该文件,从shell中运行一个进程,默认会有3个文件描述符存在(0、1、2);)0表示标准输入,1表示标准输出,2表示标准错误。一个进程当前有哪些打开的文件描述符可以通过/proc/进程ID/fd目录查看。   今天,我们主要说两个用于复制文件描述符的函数dup()和dup2()。 dup()、dup2()函数 ...

编程随笔与杂谈 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

APUE学习手札 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理

3.2 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理。 思路,不断执行dup函数,直到返回与newfd相同的文件描述符,所有都执行结束之后关闭之前dup返回的文件描述符 不要忘记特判newfd和fd相同的情况,直接返回。记住dup2还多了一歩先关闭newfd的步骤 #include "apue.h" #define BUFFSIZE 16 int main() { char buffer[BUFFSIZE]; int fdin,fdout,n;

菱形继承 1719

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux dup、dup2函数

两者不同点:dup复制到最小的文件描述符,dup2复制指定的newfd的值。

weixin_43349440的博客 1563

dup()、dup2()函数

dup和dup2也是两个非常有用的调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的 原形如下: #include  int dup( int oldfd ); int dup2( int oldfd, int targetfd )利用函数dup,我们可以复制一个描述符。传给该函数一个既有的描述符,它就会返回一个新的描述符,这

jilily的专栏 1641

九、Linux之dup和dup2函数

九、dup和dup2函数 目录:九、dup和dup2函数一、dup(duplicate)重定向1.文件描述符重定向2.dup()函数原型int dup(int oldfd);3.dup2()函数原型int dup2(int oldfd, int newfd); 一、dup(duplicate)重定向 1.文件描述符重定向 即 new_fd > old_fd,假设文件描述符 old_fd 指向某文件,则 new_fd 重定向于 old_fd 后,文件描述符 new_fd 也指向 old_fd; 最终,

~宪宪的博客 1208

linux c 编程 dup()、dup2()、dup3()函数

1.描述 复制文件描述符。 dup() dup()系统调用生成文件描述符oldfd的一个副本,从未使用的文件描述符当中选取最小的文件描述符作为新的文件描述符。 当成功返回后,旧的文件描述符和新的文件描述符可以互换使用,这两个描述符指向了同一个打开的文件描述符(见系统调用open()),他们共享同一个文件偏移量和文件状态标志。比如说,当使用lseek操作某一个文件描述符,改变了该文件的偏移量的时候,使用另外一个描述符看到的是相同的偏移量。 这两个文件描述符不会共享文件描述符标志(例如 close-on-exe

q435201823的博客 1560

dup和dup2函数

dup和dup2函数 dup和dup2是两个非常有用的调用,他们的作用都是用来复制一个文件的描述符(使我们能够通过两个或者更多个不同的文件描述符来访问同一个文件),他们经常用来重定向进程的stdin、stdout和stderr。 声明如下: #include<unistd.h> int dup(int fd); 源描述符fd,返回值是描述符表中最小的文件描述符,返回的描述符和...

weixin_42904113的博客 2952

Linux应用编程之dup函数和dup2函数

在 Linux 系统中,open 返回得到的文件描述符 fd 可以进行复制,复制成功之后可以得到一个新文件描述符,使用新的文件描述符和旧的文件描述符都可以对文件进行 IO 操作,复制得到的文件描述符和旧的文件描述符拥有相同的权限,譬如使用旧的文件描述符对文件有读写权限,那么新的文件描述符同样也具 有读写权限;在 Linux 系统下,可以使用 dup 或 dup2 这两个系统调用对文件描述符进行复制。我们来学习下两个函数的用法以及它们之间的区别。 复制得到的文件描述符与旧的文件描述符都指向了同一个文件表,.

shengnan89的博客 3074

dup()/dup2()函数使用

dup()函数 函数功能: 复制文件描述符; 函数原型 int dup(int oldfd); oldfd --需要复制的文件描述符; 函数返回值 成功:返回最小且没有被占用的文件描述符; 失败:返回-1,设置error; //测试dup函数复制文件描述符 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h

weixin_46211877的博客 346

dup()与dup2()的浅析

文章目录前言定义详解close then openopen - close - dup -closeopen - dup2 - close参考: 前言 关于dup()和dup2()的使用在Linux系统编程中是十分重要的一环,但关于dup2()的使用总有一种雾蒙蒙的感觉,本文会从dup()说起,希望可以带领大家走过迷雾 文中代码片中代码仅供逻辑参考 因本人水平有限,若文中有何纰漏,恳请各位斧正 定义 详解 dup()的使用与open(),close()函数的联系十分密切 思考一下,我们如何完

lin3ux的博客 766

[Linux]dup()与dup2()函数详解

dup()和dup2()是Unix/Linux系统中用于复制文件描述符的函数。示例代码展示了如何使用dup()和dup2()将标准输入或输出重定向到文件,从而实现数据的读写操作。

我的博客 591

实现dup2功能相同的函数

自行实现dup2的功能。函数原型:int mydup2(int fd, int fd2),思路如下: 1.fd2小于0,直接返回错误; 2.如果fd是有效的文件描述符且等于fd2,直接返回fd2; 3.如果fd2已经打开,关闭fd2; 4.分配一个长度为fd2值的fdset数组,不断调用dup,直到返回的文件描述符的值和fd2相等; 5.清理资源,返回fd2。 实现的函数代码如

lm2009200的博客 787

dup()函数

#include <stdio.h> #include<fcntl.h> #include<unistd.h> int main(int argc , char *argv[]) { if ( argc <2 ) { perror("error"); } int fd1, fd2; fd1 = ...

qq_42104065的博客 1545
上一篇: 线性表1.1
下一篇: GTK+第一课, 简单窗口创建
C_linux记事
博客等级 码龄14年 14粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值