当前位置:  技术问答>linux和unix

Unix高级环境编程一有关dup2的习题,求解释!!!!

    来源: 互联网  发布时间:2017-02-10

    本文导语:  习题3.4:   在许多程序中都包含如下一段代码:    dup2(fd,0); dup2(fd,1); dup2(fd,2); if(fd > 2)     close(fd);   为了说明 if语句的必要性, 假设fd为1, 画出每次调用dup2时3个描述符项及相应文件表项的变化情况. 然后再画...

习题3.4:
  在许多程序中都包含如下一段代码:
  

dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
if(fd > 2)
    close(fd);


  为了说明 if语句的必要性, 假设fd为1, 画出每次调用dup2时3个描述符项及相应文件表项的变化情况. 然后再画出fd为3的情况.

  看了答案: 
 知识点:  dup2(filedes, filedes2) , 如果filedes = filedes2, 则返回filedes2, 而不关闭它, 不等于时如果filedes2已打开,则先关闭它
 完整答案: 如果fd为1, 执行dup2(fd,1)时返回1, 没有关闭描述符1, . 调用3次后, 3个描述符指向同一文件表项,所以不需要关闭(一直想不通 这里 为什么不需要关闭? 而后面所说fd为3的时候为什么又要关闭了... 能说下这里的关闭具体是干吗? 是对描述符和与之关联的文件表项做了什么吗?)
   但如果fd 为3 , 调用3次dup2后,有4个描述符指向同一文件表项, 这种情况下就要关闭描述符3 .

  希望大家不要以为我钻牛角尖, 而是深刻体会 :  有时候很小的知识点 关键时候如果不知道  抓破脑袋也找不出BUG原因, 会让人痛苦得想死滴!!!  

|
题目的意思是,实际应用中0,1,2都对应stdin, stdout, stderr。
比如你开发一个网络调试程序,想把某程序的三路IO重定向到一个socket上,就可以:
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
完成之后你会发现fd其实是多余的,所以close掉它。
if(fd > 2)
    close(fd);

并不是说,不close(fd)就会错。只是,我们没必要再浪费一个descripter在上面。

|
前3个dup2是把描述符fd分别与0、1、2关联

如果fd=1,你又close(fd),那么1(标准输出)被关闭
如果fd=3,此时close(fd),不会影响标准输出、错误输出、标准输入

    
 
 

您可能感兴趣的文章:

  • HP UNiX ACC 参数求解
  • 高分求解,unix终端上的串口怎么标示
  • 【一个关于Linux/Unix程序开发的问题,很久了,没有人解决】 ---------UP有分,高分求解
  • POSIX.1要求system忽略SIGINT和SITQUIT,阻塞SIGCHLD,求解释。UNIX环境高级编程 system函数
  • 求解vmware下的unix系统
  • 求解 unix的锁
  • 100求解:如何在UNIX环境下创建一个新的端口号?另:能告之如何在WINDOWS2000环境下创建一个新的端口号就更好了!
  • 重分求解,UNIX下的消息队列非常失败,经常发生堵塞现象,现改用FIFO,但FIFO又得自己设计消息,请高手指点
  • 求解unix系统用root权限mkdir新文件夹,再用chown设权限成功,但是不能用!!!
  • 【高分求解】 请帮帮忙,修改这个UNIX shell程序 【UP有分】 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  • 〖高分求解〗★★★★★【C语言,用UNIX的 Semaphore 写并发程序.---测试素数】★★★★★〖up有分〗
  • 想做一些unix编程的基本习题,请帮忙推荐一本合适的书。谢谢!
  • unix环境高级编程中一个习题的疑问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高级UNIX编程和UNIX环境高级编程是不是一本书
  • 读过 Unix网络编程 或者 熟知Unix网络编程的 的进来看一下
  • 想看linux内核源代码,另外手头上有一本《unix环境高级编程》,需要先把《unix环境高级编程》看完之后再看内核吗?
  • 我下载了UNIX环境高级编程的源码,可是打开时有错误,怎么才可以打开?还有谁有《UNIX环境高级编程(英文版)》的chm格式的ebook?
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • 想学linux下程序开发,不知道买哪本书好《UNIX环境高级编程》(中文第一版)还是《UNIX环境高级编程》(英文第二版)
  • unix编程与linux编程有什么区别?
  • [学习UNIX编程]初学UNIX编程,遇到一个小小的问题,烦劳大虾帮忙解惑,谢谢!
  • 看Unix环境高级编程,提到了V和bsd,有很多不同,但是没有提到Linux,请问linux跟BSD或者unix V 编程细节哪些不同的,特别是线程,进程,和socke
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?《Linux下的c编程》《嵌入式系统C编程》那个更适合初学者?各是那个出版社的?(
  • 我初学 Unix 编程,在看《Unix环境高级编程》时有一个问题请指教。
  • 我学&用Linux编程,手里有《UNIX环境高级编程》,看它行吗?
  • 谁有介绍UNIX下面函数的书啊,类似UNIX编程参考手册的东西
  • UNIX编程艺术,了解unix文化强烈推荐这本书
  • UP有分,推荐几本书给我吧,兄弟们,UNIX入门与编程的与编程的,
  • 学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 请问:如果懂unix编程,那么会懂linux编程吗?一般来说:它们有什么关系呢?
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?是那个出版社的,是中文版吗?
  • 学习UNIX编程应该从那里入手?
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • unix/Linux下c++ boost thread库读写锁介绍
  • 没有unix系统我如何学习unix
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • php将unix时间戳转换成字符串时间函数(date)
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • UNIX支持中文否,请推荐UNIX好书


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3