名称::
dup/dup2
目标:
复制一个现存的文件描述符.
头文件:
#include <unistd.h>
函数原形:
int dup(int oldfd)
int dup2(int oldfd,int newfd)
参数:
oldfd 原有文件描述符
newfd 新的文件描述符
返回值:
-1 遇到错误
int 新文件描述符
系统调用dup是用来复制一个文件描述符,也就是将进程u区的文件描述符表中的一项复制一份,使得这两项同时指向系统稳健表的同一表项。
系统调用dup复制由参数oldfd指定的文件描述到进程文件描述符表的第一个空表项处。而系统调用dup2复制由参数oldfd指定的文件描述到参数newfd指定的文件描述符表项处。老的文件描述符和新复制的文件描述符可以互换使用。它们共享锁、文件指针和文件状态。例如,对其中一个文件描述符使用系统调用lseek修改文件指针的位置,对另一文件描述符来说文件指针也改变了,其实我们了解了内核的工作原理,这一点很容易理解。因为我们知道,文件指针是放在系统文件表中的。但这两个文件描述符具有不同的close-on-exec标志,因为该标志是存放在文件描述符表中的。
该调用成功时,返回值为新的描述符;错误时,返回-1,并设置相应的错误代码errno:
EBADF:参数oldfd不是一个已经打开的文件描述符;或者参数newfd超出允许的文件描述符的取值范围。
EMFILE:进程打开的文件描述符数量已经到达最大值,但仍然企图打开新的文件描述符。
下面我们来看一个简单的例子。在这个例子中,我们将标准输出(文件描述符为1)关闭,并将一个打开了普通文件“output”的文件描述符复制到标准输出上,因为刚关闭了文件描述符1,所以,文件描述符表的第一个空表项是1。所以,程序以后的printf等向标准输出写的内容都写到了文件中。
利用这个功能我们可以把输出/输入重定向到文件中。下面是一个例子。
#include <stdio.h>
#include <unistd.h>
#include <systypes.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
main(int argc,char *argv[])
{
int fd;
if ((fd=open(argv[1],O_CREAT|O_RDWR,0644))==-1)
printf("cannot open output file ");
close(1);
if(dup(fd)==-1);
perror(“error”);
close(fd);
printf("This line will write to file ");
}
该程序执行过程的屏幕拷贝:
[wap@wapgw /tmp]$ gcc -o 1_5 1_5.c
[wap@wapgw /tmp]$ ./1_5 test1
[wap@wapgw /tmp]$ more test1
This line will write to file
dup2的功能和dup基本相同,只不过是dup2复制oldfd到newfd上。下面是用dup2实现同样的例子。
#include <stdio.h>
#include <unistd.h>
#include <systypes.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
main(int argc,char *argv[])
{
int fd;
if((fd=open(argv[1],O_WRONLY|O_CREAT,0644))==-1)
perror(“error”);
close(1);
if(dup2(fd,1)==-1)
perror(“error”);
close(fd);
printf(“This line will write to file \n”);
close(fd);
}
分享到:
相关推荐
UNIX 编程中的 dup 和 dup2 说明 UNIX 编程中的 dup 和 dup2 函数是两个非常有用的系统调用,它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的 stdin、stdout 和 stderr。 dup 函数的原型为 `...
在Linux操作系统中,`dup`和`dup2`是两个重要的系统调用,它们与文件描述符管理和进程间通信紧密相关。本文将详细介绍这两个函数的工作原理、使用场景以及如何用C语言实现它们。 首先,我们来看`dup`系统调用。`dup...
本篇文章将深入探讨如何通过`dup()`和`dup2()`两个系统调用来复制文件描述符,并提供相关示例代码。 `dup()`函数是Linux提供的一个系统调用,它的主要作用是创建一个新的文件描述符,该描述符与已存在的一个文件...
其中,`dup` 和 `dup2` 函数在处理文件描述符时非常有用。本文将深入探讨这两个函数的用途及其工作原理,特别是 `dup2` 的使用场景。 #### 二、文件描述符的概念 在Linux或Unix系统中,每个进程都会有一系列的文件...
总的来说,DUP414中文驱动是确保DUP-414设备在中文操作系统环境中正常运行的关键软件,而提供的压缩包文件则包含了安装和测试驱动所需的所有内容。用户只需按照正确的步骤操作,就能让设备充分发挥其功能,处理各种...
7. **dup2.ini**:配置文件,存储用户的设置和自定义选项,补丁会根据这个文件中的信息来个性化用户的游戏体验。 8. **diablo2oo2's.wildcard.rules.ini**:可能是一份规则文件,用于定义游戏中的某些自定义规则...
在软件开发和维护过程中,补丁是修复程序错误、提升性能或增强功能的关键手段,DUP 2.1 提供了强大的功能来简化这一过程。 偏移量补丁主要针对二进制文件中的特定地址进行修改,通过指定原始值和目标值,可以在不...
dup函数在系统编写程序的用法 及源代码
压缩包内的文件如dup2.exe是主程序,dup2.ini是配置文件,readme.txt包含了使用说明,plugins目录则包含可扩展插件,icons则存储了各种图标资源,这些都丰富了工具的功能并提供了便利。 在实际操作中,用户需要了解...
1. `dup2_help.chm`:这是帮助文件,通常以CHM(Compiled HTML Help)格式提供,用户可以通过它获取软件的使用指南和详细信息。 2. `DisasmEngineDLL.dll`:动态链接库文件,可能包含了反汇编引擎的代码,用于分析二...
经典的补丁工具,破解领域很有名的哦!!!!
3.推荐喜欢自定义补丁颜色的朋友使用 cnhhkk 制作的 dUP2 的颜色辅助 设置工具 - dUP 2 Color Panel。 主页地址:http://cnhhkk.21windows.cn 镜像地址: http://vip.hanzify.org/tracky/dUP2ColorPanel.rar ...
vb.net dup通信,含打洞技术,很有用,提供给大家学习。
本文总结了C++面试题网络编程篇中的重要知识点,包括dup和dup2函数、lseek函数、sync、fsync和fdatasync函数、fcntl函数、exit和_exit函数、setjmp和longjmp函数、记录锁、守护进程编程规范等。 1. dup和dup2函数 ...
在C语言中,`dup()`和`dup2()`都是用于复制文件描述符的函数,它们在处理进程的I/O操作时非常有用。文件描述符是操作系统分配给打开文件的唯一标识,通过它来读写文件。下面我们将详细介绍这两个函数的工作原理、...
大牛路过别叨叨!专业破解。功能强大。灵活的利用dup/dup2可以给你带来很多强大的功能,花了一些时间总结出上面那么多,不知道自己理解的是否透彻,只能在以后的实践中慢慢探索了。
在实际应用中,dup2常用于进程间通信(IPC)和管道等场景。例如,在创建子进程时,父进程可能会使用dup2来确保子进程继承特定的文件描述符,如标准输入、输出和错误。此外,dup2也可以用于实现所谓的“无名管道”,...
- dup2.exe:这是DUP的主程序文件,负责运行和管理所有补丁操作。 - dup2.ini:配置文件,保存用户的设置和自定义选项。 - dup2_help.chm:帮助文件,提供了详细的使用指南和补丁说明。 - readme.txt:包含程序...
dup和dup2函数的原型分别为int dup(int oldfd)和int dup2(int oldfd, int newfd),作用是复制文件描述符oldfd到newfd,如果newfd已经打开,则先关闭newfd再复制。 6. 标准IO库介绍 文档最后介绍了标准IO库,它与...