引用
网上有很多资料详细讲解了dup和dup2的用法,有讲得不错的,但总感觉理解起来还是有点困难,通过实践,我发现一种C程序更容易理解的讲解方法-使用类比指针的方法来阐述dup和dup2的用法,可能更容易让人在非常短的时间内接受,下面的内容是我理解dup和dup2用法的总结,希望对dup和dup2存有疑惑的朋友所有帮助。
int* STDIN_FILENO = (int *)0; // 这是一个指向标准输入的指针,由系统预定义,所以可以直接拿来使用
// 下面这句的意思相当于:int* stdinp = STDIN_FILENO,
// 即使用stdinp和STDIN_FILENO指向同一个地方
int* stdinp = dup(STDIN_FILENO);
// 下面创建管道
int fd[2];
pipe(fd);
// 下面这句相当于:
// STDIN_FILENO = fd[0];
// 从这里可以看出STDIN_FILENO和stdinp指向了不同的位置
dup2(fd[0], STDIN_FILENO);
// 在这里可以关闭fd[0],因为我们还可以通过STDIN_FILENO
// 来操作这块内存,原因是STDIN_FILENO和fd[0]是指向同一个地方的
// 所以通常会:
close(fd[0]);
// 以后STDIN_FILENO可以替代fd[0]了,close(fd[0])相当于
// fd[0] = NULL;
// 将fd[0]指向一个有效的安全值,关闭它
// 下面再说说如何恢复:
// 只需要执行:
dup2(stdinp, STDIN_FILENO);
// 这又使用STDIN_FILENO和stdinp指向了相同的地方,由于stdinp实际上是指向最原始的“STDIN_FILENO”的,
// 所以相当于恢复了指向
// 由于STDIN_FILENO和stdinp现在又都指向了相同的地方,所以stdinp已经完成历史使命,这个时候可以关闭它了:
close(stdinp);
// 这个当然相当于:
stdinp = NULL;
至此,dup2&dup2的用法讲完了,不知道大家是否可以理解,但我想从指针的角度来理解应该还是相当容易的,且不
会忘记不容易出错,只要你真正理解了C语言中的指向是啥东西(指向一个内存的东东)。
不过,还有一点要请各位注意,dup和dup2的改变指向时会分配内存,所以在不使用时要记得打开,否则
你可能遇到“打开的文件过多”的错误,比如:
int* stdinp = dup(STDIN_FILENO);
之后,当stdinp完成了它的历史使命之后,应该调用close(stdinp)将stdinp关闭掉,否则会造成打开的文件未关闭。
分享到:
相关推荐
在linux中实现dup以及dup2,用C语言实现,里面有可执行文件,直接运行
详细介绍dup2函数用法,一看必懂.。。。
UNIX编程中的dup和dup2说明 UNIX编程中的dup和dup2说明
Linux系统编程——文件描述符的复制:dup()和dup2(),相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45870459
dup函数在系统编写程序的用法 及源代码
经典的补丁工具,破解领域很有名的哦!!!!
3.推荐喜欢自定义补丁颜色的朋友使用 cnhhkk 制作的 dUP2 的颜色辅助 设置工具 - dUP 2 Color Panel。 主页地址:http://cnhhkk.21windows.cn 镜像地址: http://vip.hanzify.org/tracky/dUP2ColorPanel.rar ...
大牛路过别叨叨!专业破解。功能强大。灵活的利用dup/dup2可以给你带来很多强大的功能,花了一些时间总结出上面那么多,不知道自己理解的是否透彻,只能在以后的实践中慢慢探索了。
vb.net dup通信,含打洞技术,很有用,提供给大家学习。
DUP-414中文驱动,希望能有需要的同学
from command line, you input ./direction inputfile outputfile, to practice how to use dup() or dup2()
dUP v2.17 Beta 23 汉化版 by tracky
dup2.exedup2即diablo2oo2's Universal Patcher,本版本为简体中汉化版,它是一款非常好用的补丁制作工具,功能强大,编辑后可以即时生成补丁或生成Loader,你可以根据需要来自定义设置皮肤,生成的补丁体积很小,...
dUP(diablo2oo2’s Universal Patcher)可以说是当今补丁制作工具的王者,dUP工具的强大就在于他可以满足你所能够想到的对文件的修改方式。当你对免费有一定了解之后,建议你来体验一下dUP的过人之处。diablo2oo2s ...
DUP服务端代码——UDPServer.py
2.2最新版的哦。汉化过的,非汉化站的东西
主要介绍了简要对比C语言中的dup()函数和dup2()函数,是C语言入门学习中的基础知识,需要的朋友可以参考下
使用fork(),exec(),dup2(), pipe(),open()系统调用完成与下列shell命令等价的功能:grep -v usr | wc -l > result.txt
2.对于TCP,支持服务器和客户端模式。 3.支持多连接,可同时对多路网络连接进行操作。 4.对于UDP,支持组播方式。 5.可显示当前数据传输速度。 6.数据显示方式分为16进制和TEXT两种。 7.可发送文件。 8.可把接收到的...