管道与重定向常常需要使用dup与dup2复制句柄,其中dup2又较为常用,但是使用dup2有几个小坑需要注意. int dup2(int oldfd, int newfd); man手册页上是这样讲的,oldfd是想要复制的句柄,newfd是复制到的句柄号,如果newfd已经打开,dup2会先尝试关闭, 复制完成后,oldfd与newfd都将指向同一文件实例.一般需要close(oldfd)来减少不必要的引用.所以一般人可能会这样写代码: if (dup2 (oldfd, newfd) != -…