dup2是Linux下用来实现文件描述符复制的api,dup2(fd1, fd2)将会把fd1复制到指定的fd2下,如果fd2是一个已经打开的描述符,dup2会自动的先将其安静的关闭。我们知道Linux的进程表中会维护打开的文件表项,复制的作用是使fd2指向了fd1所指向同一个文件。当我们关闭了指向同一个文件的fd的时候,关闭一个fd另外一个fd是不受影响的。下面的例子我们通过把/dev/null复制给标准输出,让程序的标准输出消失掉。

例子

#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>int main() {printf("befor dup stdout!\n");int devNullFd = open("/dev/null", O_RDWR);dup2(devNullFd, STDOUT_FILENO);printf("after dup stdout!\n");sleep(30);close(devNullFd);const char* testStr = "test";write(STDOUT_FILENO, testStr, strlen(testStr));perror("error:");sleep(10);close(devNullFd);write(devNullFd, testStr, strlen(testStr));perror("error:");return  0;
}

结果

befor dup stdout!
error:: Success
error:: Bad file descriptor

文件表结构


sudo ls -l /proc/37410/fd
total 0
lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 0 -> /dev/pts/6
lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 1 -> /dev/null
lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:34 2 -> /dev/pts/6
lrwx------ 1 oujiangping oujiangping 64 Aug 21 16:35 3 -> /dev/null

dup2复制文件描述符相关推荐

  1. linux 标准输出 复制,使用LINUX dup2 复制文件描述符到标准输出STDOUT_FILENO

    7 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 15 16 17 int main(int arg ...

  2. dup、dup2实现文件描述符重定向(标准输入、标准输出、标准错误输出)

    目录 dup函数 dup2函数 重定向标准输入 重定向标准输出 重定向标准错误输出 重定向恢复 总结 在前文中,可以知道,文件描述符实际上是指向文件表项的指针数组索引,也就相当于每个文件描述符都对应一 ...

  3. 【Linux系统编程】 文件描述符的复制:dup()和dup2()

    dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件. 这个过程类似于现实生活中的配钥匙,钥匙相当于文件描述符,锁相当 ...

  4. Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)

    一.dup/dup2 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接.系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号 ...

  5. linux存储--文件描述符以及file结构体(一)

    一.什么是文件描述符 在Linux下一切皆文件,对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数,当打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.当读. ...

  6. linux 打开文件表 文件描述符,文件描述符-mjsc1023-ChinaUnix博客

    是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表. 文件描述符及其作用 对于 Linux 而言,所有对设备和文件的操作都使用文件描述符来进行的.文件描述符是一个非负 ...

  7. linux下文件描述符的介绍

    linux下文件描述符的介绍 (2012-10-02 16:01:56) 转载▼ 标签: 描述符 调用 返回 进程 限制 it 分类:linux 当某个程序打开文件时,操作系统返回相应的文件描述符,程 ...

  8. Linux C:文件描述符、IO重定向、恢复标准输入输出

    目录 一.文件描述符 二.IO重定向 三.重定向回终端.伪终端 四.恢复标准输入输出 一.文件描述符 在Linux中,文件描述符是一个非负整数的数据类型.是FILE结构体中的一个成员属性. 每打开或者 ...

  9. Linux学习:文件描述符相关函数

    (1)复制文件描述符 头文件: #include <unistd.h> 原型: int dup(int oldfd); 参数: 要复制的文件描述符. 返回值:新的文件描述符. 效果: du ...

最新文章

  1. 如何入门学习自动驾驶感知技术?
  2. UA PHYS515A 电磁理论V 电磁波与辐射1 电磁波的方程
  3. Java 8 - 收集器Collectors_分区partitioningBy
  4. java url 返回值_java提交url后返回值怎么取
  5. OpenCV使用Orbbec Astra 3D相机
  6. php 字符串匹配 like,ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法...
  7. Mysql的安装和配置
  8. 命令行shell 用于SQLite
  9. WebSocket与http长连接的区别
  10. PHP伪协议-文件包含漏洞常用的伪协议
  11. linux查看消息队列的状态,linux – 如何知道某个时间点在消息队列中收到的消息数...
  12. java web典型模块大全_python+selenium基于po模式的web自动化测试框架
  13. 30岁女IT工程师感叹:靠这工具,把报表做成养老工作,月薪快3W
  14. Nginx资源合并优化模块nginx-http-concat
  15. 关于举办“2022年(第15届)中国大学生计算机设计大赛”通知
  16. linux下mkisofs制作光盘映像cdrecord刻录光盘
  17. Gartner2021新兴技术成熟度曲线,AI与超自动化支撑数字化变革
  18. 【ArcGIS微课1000例】0039:ArcGIS注记转CAD注记的方法
  19. LeetCode 557 反转字符串中的单词 III
  20. 【BigHereo 40】---L13---C++语言大总结

热门文章

  1. dwg格式的计算机图,【2人回答】电脑上得CADDWG文件图标如何变成这样?-3D溜溜网...
  2. 空间伤感日子分享:这一刻,我输给了眼泪
  3. KepServer的下载安装与使用说明
  4. 招聘大师版v6.7.5求职招聘
  5. iOS之蓝牙设备的唯一标识问题
  6. TP整合微信遇到的一系列问题
  7. 生成树协议实验报告_【网络技术联盟站】从原理到实验再到优化剖析STP生成树协议...
  8. DRV8812芯片被国产激光打印机驱动芯片TMI8262取代
  9. 浏览计算机已查找驱动程序软件,魅族魅蓝MX4pro官方固件刷机教程_线刷|救砖教程图解...
  10. day10-python操作word文档作业