linux之dup和dup2函数解析

linux之dup和dup2函数解析

系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号)。dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符。

在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的节点指针会指向节点表。看下图:

dup和dup2两个函数都可以用来复制打开的文件描述符,复制成功后和复制源共享同一个文件表。看下图:

dup函数

dup返回的新文件描述符一定是当前可以用描述符中的最小值。下面先打开一个文件来看下文件描述符,为保证测试成功,创建一个测试文件log.txt。

上面的代码用读写打开了log.txt这个文件,编译上面的代码然后执行,执行成功的话,应当是输出3,因为0,1,2分别被标准输入,标准输出,标准错误输出占用了。使用dup复制这个文件描述符,并尝试移动fd偏移量:

编译执行上例代码可以发现当移动fd的偏移量时,copyfd的偏移量也发生了变化。往文件里写入内容试试,先把log.txt内容清空。

编译执行程序,log.txt的就有hello world!字符串了。

dup2函数

dup2和dup函数一样,只是返回的文件描述符可以通过第二个参数”可用的文件描述符“指定。如果“可用的文件描述符“是打开状态,则会被关闭;如果”现存的文件描述符“和”可用的文件描述符“一样,则不会关闭,笔者认为这两个参数值一样的话,代码是没有任何意义的。

上面程序就是指定返回的文件描述为1000,再来看下指定的文件描述符是打开的情况,修改上例代码,将文件描述符指定为1:

编译执行程序将看不到任何输出,因为1是终端标准输出的标识符,经过这样一复制后,标准输出就被关闭了,使用printf自然看不到输出信息了。

linux之dup和dup2函数解析相关教程

linux文件重定向 dup,linux之dup和dup2函数解析相关推荐

  1. 文件上传linux服务器,Linux 文件上传Linux服务器

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  2. linux文件权限754,Linux文件权限

    Linux文件权限 在Linux中,对系统服务的文件通常只有root才能读写或执行. 说明:Linux记录用户身份的是UID(用户ID)和GID(群组ID),root的两个ID号均为0,一般用户的两个 ...

  3. linux文件未识别,linux的内核文件vmlinuz介绍-深入理解Linux重定向的使用-网卡eth0,未识别的端口的解决方法_169IT.COM...

    介绍:Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. Linu ...

  4. linux之dup和dup2函数解析

    理论介绍: 1. 文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从she ...

  5. linux 重定向文件,Linux 文件重定向

    在 Linux 系统中: 标准输入(stdin)默认为键盘输入:标准输出(stdout)默认为屏幕输出:标准错误输出(stderr)默认也是输出到屏幕. Linux Shell 环境中用 " ...

  6. linux存储--dup和dup2函数解析(十八)

    1.文件描述符在内核中数据结构 在具体说dup/dup2之前,我认为有必要先了解一下文件描述符在内核中的形态.一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一个 ...

  7. linux 文件操作 编程,Linux系统编程------------文件操作(基础)

    一.文件操作 1.1 Linux文件系统结构 1.1.1  Linux常见系统目录 /bin  :  存放普通系统可执行的命令(ls wc等) /sbin  :  存放系统管理程序(fsck等) /b ...

  8. linux文件浏览 ls,linux浏览文件命令

    在linux下我们要浏览文件的内容,可以通过相关的命令来执行操作,下面由学习啦小编为大家整理了linux下浏览文件命令的相关知识,希望对大家有所帮助! linux浏览文件命令1.cat [功能说明] ...

  9. linux简单重定向代码,Linux Shell编程(26)——代码块重定向

    像 while, until, 和 for 循环代码块, 甚至 if/then 测试结构的代码块都能做到标准输入的重定向. 即使函数也可以使用这种重定向的格式 .所有的这些依靠代码块结尾的 < ...

最新文章

  1. openGL学习笔记(1)——常用方法原型解释
  2. 开发脚本自动部署及监控
  3. k3note Android8,联想乐檬K3 Note官方稳定版 最新VIBE刷机包 精简优化 完美加入Root权限...
  4. 二分类卷积核极限数量实验
  5. Day 6:Vector类和实现Hashset以及登录窗口的模拟
  6. Spring Boot(十七):使用Spring Boot上传文件
  7. macos docker 安装mysql,mac 中docker安装mysql的图文教程
  8. 数据库高级知识——mysql架构介绍(二)
  9. 多层陶瓷电容器用处_陶瓷电容器的用途有哪几种?
  10. 华为S5024p交换机配端口镜像
  11. C++11 std::chrono库详解
  12. 计算机grand,The Grand
  13. (转)AI vs 深度学习 vs 机器学习:人工智能的 12 大应用场景
  14. 中级财务管理机考计算机,2017年中级会计师考试无纸化机考技巧
  15. 微型技术博客之匿名内部类
  16. 关于启动报错:Field xxxMapper in com.xxx.service.impl.xxxServiceImpl required a bean of type的解决方案
  17. SQL1005N 数据库别名 ECM 已存在于本地数据库目录或系统数据库目录中。
  18. 关于QImageReader多次调用read失败的问题
  19. 创建虚拟机步骤以及开启电脑虚拟设置方法
  20. 适配器模式 个人理解+JAVA 小例子

热门文章

  1. 比知识更重要的,是元认知和深度思考
  2. mvp的全称_打游戏抢了这么久的MVP,你竟不知道MVP的全称和由来?
  3. 标梵互动信息解说关于CSS-in-JS: 使用及优缺点
  4. Centos上卸载阿里云盾
  5. mysql对单引号的模糊查询_SQL语句中的单引号处理以及模糊查询
  6. Guitar Pro8吉他打谱下载自学制作教程
  7. Pytorch+LSTM+Encoder+Decoder实现Seq2Seq模型
  8. matlab模拟塞曼图谱,C.基于LabVIEW的塞曼效应虚拟仿真-中国高等学校实验物理教学研究会.ppt...
  9. 关乎Java多线程+Runnable和Thread…
  10. 前端打包之后 运用nginx反向代理运行项目