管道与重定向常常需要使用dup与dup2复制句柄,其中dup2又较为常用,但是使用dup2有几个小坑需要注意。

int dup2(int oldfd, int newfd);

man手册页上是这样讲的,oldfd是想要复制的句柄,newfd是复制到的句柄号,如果newfd已经打开,dup2会先尝试关闭,

复制完成后,oldfd与newfd都将指向同一文件实例。一般需要close(oldfd)来减少不必要的引用。所以一般人可能会这样写代码:

 if (dup2 (oldfd, newfd) != -1)
close (oldfd);

但是有个例外的情况,就是oldfd==newfd,照man手册页上讲,此时dup2将什么也不做,直接返回成功。

此时oldfd与newfd相同,而close(oldfd)将导致文件的唯一引用被关闭,后续的操作可想而知也会失败。

所以万无一失的dup2使用方法是这样:

 if (oldfd != newfd) {
if (dup2 (oldfd, newfd) != -1)
close (oldfd);
}

样例代码

最新文章

  1. mkstemp生成临时文件
  2. IIS7.5 伪静态 脚本映射 配置方法
  3. Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)
  4. js之内置对象
  5. android 关于InputDispatcher出现Consumer错误的解决办法
  6. codeforce 600A - Extract Numbers
  7. odoo8 email
  8. searchbar的使用介绍
  9. 多台服务之间共享Session
  10. 移动端 像素渲染流水线与GPU Hack
  11. zookeeper分布式锁避免羊群效应(Herd Effect)
  12. 最短路径之Dijkstras算法(图片格式)
  13. sniffer 软件的使用方法
  14. python3——模块
  15. Luogu4491 [HAOI2018]染色 【容斥原理】【NTT】
  16. 简单的dfs题 --- POJ1321 棋盘问题
  17. Nginx+uWSGI启动Django
  18. webpack配置antd的按需加载
  19. [20181226]简单探究cluster table.txt
  20. typescript和coffeescript简介

热门文章

  1. 构建自己的PHP框架(路由)
  2. ./configure,make,make install的作用(configure一般用来生成 Makefile,相当于qmake)
  3. Java之"Mozilla Rhino"引擎(二)
  4. WPF编游戏系列 之一 布局设计
  5. UWP 裁切 SoftwareBitmap
  6. Motion Paths in WPF 4 using Expression Blend 4
  7. 用Delphi实现文件下载的几种方法(三种使用控件的方法)
  8. Android实现dialog时候弹出软键盘dialog移位问题
  9. Android CTS Test failed to run to conmpletion 测试超时问题
  10. Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)