dup/dup2

dup/dup2是两个用于指定文件操作符的方法,作用很相似,它是得两个文件描述符指向同一个file结构体,使file的引用计数为2,所以在使用的时候我们需要手动关闭另外一个不需要的。

dup:

dup的作用是将文件描述符指向一个最小的文件描述符。

       #include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);

因为比较简单,就从代码来看吧

  1 #include<stdio.h>2 #include<sys/types.h>3 #include<sys/socket.h>4 #include<string.h>5 #include<fcntl.h>6 #include<unistd.h>7 #define _PATH_ "./test.log"8 9 10 int main()11 {12     umask(0);13     int fd=open(_PATH_,O_CREAT|O_WRONLY,0644);//打开一个新的文件14     if(fd<0)15     {16         perror("open");17     }18     close(1);//关掉需要用dup指向的文件描述符,注意(dup会使fd指向一个未使用的最           //小的文件描述符)19     int new_fd=dup(fd);//现在1号文件描述符指向刚才open的文件20     close(fd);   //关闭之前open的文件描述符,如果不关闭,则从fd中也能网文件                               //里写。21     char buf[1024];22     while(1)23     {24         memset(buf,'\0',sizeof(buf));25         ssize_t size=read(0,buf,sizeof(buf)-1);26         if(size>0)27         {28             buf[size]='\0';29         }30         if(strncmp(buf,"quit",4)==0)31         {   32             break;31         {32             break;33         }34         printf("%s",buf);//printf会输出到1号文件描述符中35         fflush(stdout);36     }37     close(1);38     return 0;39 }

效果图

dup2:

 1 #include<stdio.h>2 #include<sys/types.h>3 #include<sys/socket.h>4 #include<string.h>5 #include<fcntl.h>6 #include<unistd.h>7 #define _PATH_ "./test.log"8 9 int main()10 {11     umask(0);12     int fd =open(_PATH_,O_CREAT|O_WRONLY,0644);13     if(fd<0)14     {15         perror("open");16     }17     close(1); //使用dup2所使用的重定向到的文件描述符必须先关闭18     int newfd=dup2(fd,1);19     close(fd);//关闭fd现在只有1号文件描述符指向所open的文件20     char buf[1024];21     printf("%d\n",newfd);22     while(1)23     {24         memset(buf,'\0',sizeof(buf));25         fgets(buf,sizeof(buf)-1,stdin);26         if(strncmp(buf,"quit",4)==0)27         {28             break;29         }30         printf("%s",buf);31         fflush(stdout);32     }33     return 0;34 }

结果和dup一样

总结:

当需要往标准输出上打的调试信息,可以使用重定向的方式让它输出到相应的文件中。

转载于:https://blog.51cto.com/wpfbcr/1784970

高级I/O-----dup/dup2相关推荐

  1. dup/dup2函数的用法

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

  2. 进程间通信管道进阶篇:linux下dup/dup2函数的用法

    由于利用管道实现进程间通信,是通过创建两个文件描述符,但是描述符的初始化是通过随机的,就是从可用的文件描述符中取出,并将可用的文件描述符与file对象相关联,如果我们需要将管道的两头与其他的流相关时, ...

  3. dup/dup2的用法及详解(转)

    相信大部分在Unix/Linux下编程的程序员手头上都有<Unix环境高级编程>(APUE)这本超级经典巨著.作者在该书中讲解dup/dup2之前曾经讲过"文件共享", ...

  4. linux dup跨进程使用,linux下dup/dup2函数的用法

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

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

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

  6. dup/dup2函数

    #include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 当调用dup函数时,内核在进程中创建一个新的 ...

  7. linux c dup dup2 重定向函数简介

    dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下. 1. dup函数 头文件及函数定义: #include <unistd.h ...

  8. dup,dup2函数

    这两个函数的功能是输出的重定向       定义这两个函数的头文件是unistd.h,有兴趣的可以自己看看这个头文件包含的内容              要提的是这个头文件同时定义了下面三个常量 ST ...

  9. linux下dup函数,Linux dup dup2函数理解

    在linux中,我们需要复制文件描述符,下面是我对文件描述符的理解 int dup(int fd); // 复制一个已经存在的文件描述符,如果成功,返回复制成功后的文件描述符,失败返回-1 int d ...

  10. linux dup作用,linux dup()\dup2()函数

    dup函数的作用:复制一个现有的句柄,产生一个与"源句柄特性"完全一样的新句柄(也即生成一个新的句柄号,并关联到同一个设备) dup2函数的作用:复制一个现有的句柄到另一个句柄上, ...

最新文章

  1. 爱奇艺手机客服端储存的视频,如何在手机文件夹里面找到啊?
  2. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
  3. 使用jdbc操作mysql数据库_java使用JDBC操作MYSQL数据库
  4. BOOST 线程完全攻略 - 结束语
  5. ESP8266学习笔记6:ESP8266规范wifi连接操作
  6. 【java】java 线程组 ThreadGroup
  7. Cocos Creator 编辑器扩展
  8. 31. Next Permutation
  9. 8月总庆祝:点击过百万,升级V8,进入前300名
  10. 备战数学建模12-模糊综合评价模型
  11. windows server 2012 r2 *** 服务器搭建
  12. 架构师之路 — 分布式系统 — 分布式网络分区难题
  13. 弱占优策略--Weakly Dominant Strategy
  14. iOS内测平台fir.im,发布内测版本
  15. 常用crc查表法_请教查表法计算CRC的原理
  16. 苹果cms10自适应模板好看的苹果cmsv10美化模板免费
  17. GitHub每月优秀热门项目推荐:2021年11月
  18. 在javaweb中将excel表格导入存放数据库
  19. 手机的九宫格图案解锁总共能绘出多少种图案?LeetCode 351. Android Unlock Patterns
  20. 使用Ngrok配置免费的外网域名

热门文章

  1. 伦巴时间步的动作要领_成人拉丁舞_伦巴、恰恰、桑巴舞、牛仔舞、斗牛舞
  2. android改变textview文字,如何在Android TextView中更改文本
  3. win7系统不能加入工作组计算机,技术员教你解决win7系统工作组计算机无法访问的修复办法...
  4. python pandas series_Python Pandas 系列Series
  5. 凯撒密码的实践使用-2--加密,解密的python代码事项
  6. 学生选课系统代码-1start.py代码
  7. SQL 怎么创建一个只有查询数据库用户权限呢
  8. bp神经网络数字识别matlab_基于Matlab的BP神经网络识别26个英文字母
  9. java 属性类_类和对象系列教材 (九)- Java的类属性,静态属性
  10. 可以两个人协作一个项目吗_两个人分手了,还可以继续做朋友吗?