`
wsql
  • 浏览: 11803903 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

基于dup实现linux的dup2函数(APUE练习题3.2)

 
阅读更多

忽忽....习题...拿来做做, 请指点做的哪里不好...请不要指点这个应该或不应该做...这只是习题....


author: selfimpr

blog: http://blog.csdn.net/lgg201

mail: lgg860911@yahoo.com.cn


int ud_dup2(const int ofd, const int nfd) {
	//新描述符等于旧描述符,不关闭直接返回
	if(ofd	== nfd) return ofd;

	int pid			= getpid();
	char *pathname	= malloc(sizeof(char) * 128);
	sprintf(pathname, "/proc/%d/fd/%d", getpid(), nfd);
	//如果新描述符已经被打开,关闭它
	if(!access(pathname, F_OK)) close(nfd);

	int tmp;
	int max			= sysconf(_SC_OPEN_MAX);
	int fds[max], i = 0;
	//如果新描述符值大于最大描述符数, 返回错误
	if(max < nfd) return -1;
	do {
		tmp			= dup(ofd);
		//dup出错
		if(tmp < 0) break;
		fds[i ++]	= tmp;
	} while(tmp < nfd);

	//如果拷贝出错,则i不自减,也关闭最后一次复制的描述符, 否则,最后的为新描述符, 不关闭
	if(tmp == nfd) i --;
	//关闭复制的描述符
	while(i-- >= 0) close(fds[i]);

	if(tmp != nfd) return -1;
	return nfd;
}


分享到:
评论

相关推荐

    详细介绍dup2函数用法,一看必懂.。。。

    详细介绍dup2函数用法,一看必懂.。。。

    dup_dup2介绍

    在linux中实现dup以及dup2,用C语言实现,里面有可执行文件,直接运行

    基于DUP的可靠数据传输的几个实现方法

    基于DUP的可靠数据传输的几个实现方法 ,例如UDT,窗口抖动协议等等。及在应用程序中实现数据的可靠性传输。

    简要对比C语言中的dup()函数和dup2()函数

    C语言dup()函数:复制文件描述词 头文件: #include 定义函数: int dup (int oldfd); 函数说明:dup()用来复制参数oldfd 所指的文件描述词, 并将它返回. 此新的文件描述词和参数oldfd 指的是同一个文件, 共享...

    文件描述符的复制:dup()和dup2()示例代码

    Linux系统编程——文件描述符的复制:dup()和dup2(),相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45870459

    dup源代码dup

    dup函数在系统编写程序的用法 及源代码

    TCP/DUP实现群聊点对点聊天

    模仿QQ做的一个聊天小应用,本应用通过C语言开发,功能还是比较全面的,实现了点对点、在线离线查看、隐身、群聊、离线消息查看等等。。。其他功能自己去发现吧。。

    Dup File Finder 3.2.0.1 汉化版

    现在Dup File Finder可以快速帮你解决重复图片问题。 本程序为单文件,无需安装,完全绿色。 使用时注意:由于是软件自动选择重复文件,目前还不能自动选择指定文件夹,所以在删除前请仔细检查文件路径。

    UNIX编程中的dup和dup2说明

    UNIX编程中的dup和dup2说明 UNIX编程中的dup和dup2说明

    Dup-Pack:基于CRIS的FPGA装箱方法.pdf

    Dup-Pack:基于CRIS的FPGA装箱方法.pdf

    linux_c API函数大全

    LINUX C函数库API 1.字符测试篇 15 1.1 15 isalnum(测试字符是否为英文或数字) 15 1.2 15 isalpha (测试字符是否为英文字母) 15 1.3 16 isascii(测试字符是否为ASCII 码字符) 16 1.4 17 iscntrl(测试字符是否...

    dup2 v2.18.3

    3.推荐喜欢自定义补丁颜色的朋友使用 cnhhkk 制作的 dUP2 的颜色辅助 设置工具 - dUP 2 Color Panel。 主页地址:http://cnhhkk.21windows.cn 镜像地址: http://vip.hanzify.org/tracky/dUP2ColorPanel.rar ...

    linux fork 简单使用

    使用fork、exit和exec系统调用编写多进程程序

    dup2 补丁工具

    经典的补丁工具,破解领域很有名的哦!!!!

    Linux C 一站式学习

    3.2. dup和dup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. 进程间通信 4.1. 管道 4.2. 其它IPC机制 5. 练习:实现简单的Shell 31. Shell脚本 1. Shell...

    Linux内核中的dup系统调用

    sys_dup()的代码也许称得上是简单的之一了,但是是这么一个简单的系统调用,却成了linux系统的一个特性:输入/输出重定向。sys_dup()的主要工作是用来“复制”一个打开的文件号,并使两个文件号都指向同一个文件,...

    Dup2_v2.26_汉化版 专注于破解

    大牛路过别叨叨!专业破解。功能强大。灵活的利用dup/dup2可以给你带来很多强大的功能,花了一些时间总结出上面那么多,不知道自己理解的是否透彻,只能在以后的实践中慢慢探索了。

    vb.net dup通信

    vb.net dup通信,含打洞技术,很有用,提供给大家学习。

    DUP414中文驱动

    DUP-414中文驱动,希望能有需要的同学

Global site tag (gtag.js) - Google Analytics