`
wsql
  • 浏览: 11853365 次
  • 性别: 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

    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()的主要工作是用来“复制”一个打开的文件号,并使两个文件号都指向同一个文件,...

    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.26_汉化版 专注于破解

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

    vb.net dup通信

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

    DUP414中文驱动

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

Global site tag (gtag.js) - Google Analytics