高级I/O-----dup/dup2
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相关推荐
- dup/dup2函数的用法
系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新 ...
- 进程间通信管道进阶篇:linux下dup/dup2函数的用法
由于利用管道实现进程间通信,是通过创建两个文件描述符,但是描述符的初始化是通过随机的,就是从可用的文件描述符中取出,并将可用的文件描述符与file对象相关联,如果我们需要将管道的两头与其他的流相关时, ...
- dup/dup2的用法及详解(转)
相信大部分在Unix/Linux下编程的程序员手头上都有<Unix环境高级编程>(APUE)这本超级经典巨著.作者在该书中讲解dup/dup2之前曾经讲过"文件共享", ...
- linux dup跨进程使用,linux下dup/dup2函数的用法
系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号).dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新 ...
- Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)
一.dup/dup2 有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接.系统调用dup和dup2能够复制文件描述符.dup返回新的文件文件描述符(没有用的文件描述符最小的编号 ...
- dup/dup2函数
#include <unistd.h> int dup(int oldfd); int dup2(int oldfd, int newfd); 当调用dup函数时,内核在进程中创建一个新的 ...
- linux c dup dup2 重定向函数简介
dup()函数和dup2()函数书上在文件操作那一章,已经讲过了,这周看重定向这块,发现它挺重要,就再看了回,记录下. 1. dup函数 头文件及函数定义: #include <unistd.h ...
- dup,dup2函数
这两个函数的功能是输出的重定向 定义这两个函数的头文件是unistd.h,有兴趣的可以自己看看这个头文件包含的内容 要提的是这个头文件同时定义了下面三个常量 ST ...
- linux下dup函数,Linux dup dup2函数理解
在linux中,我们需要复制文件描述符,下面是我对文件描述符的理解 int dup(int fd); // 复制一个已经存在的文件描述符,如果成功,返回复制成功后的文件描述符,失败返回-1 int d ...
- linux dup作用,linux dup()\dup2()函数
dup函数的作用:复制一个现有的句柄,产生一个与"源句柄特性"完全一样的新句柄(也即生成一个新的句柄号,并关联到同一个设备) dup2函数的作用:复制一个现有的句柄到另一个句柄上, ...
最新文章
- 爱奇艺手机客服端储存的视频,如何在手机文件夹里面找到啊?
- struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
- 使用jdbc操作mysql数据库_java使用JDBC操作MYSQL数据库
- BOOST 线程完全攻略 - 结束语
- ESP8266学习笔记6:ESP8266规范wifi连接操作
- 【java】java 线程组 ThreadGroup
- Cocos Creator 编辑器扩展
- 31. Next Permutation
- 8月总庆祝:点击过百万,升级V8,进入前300名
- 备战数学建模12-模糊综合评价模型
- windows server 2012 r2 *** 服务器搭建
- 架构师之路 — 分布式系统 — 分布式网络分区难题
- 弱占优策略--Weakly Dominant Strategy
- iOS内测平台fir.im,发布内测版本
- 常用crc查表法_请教查表法计算CRC的原理
- 苹果cms10自适应模板好看的苹果cmsv10美化模板免费
- GitHub每月优秀热门项目推荐:2021年11月
- 在javaweb中将excel表格导入存放数据库
- 手机的九宫格图案解锁总共能绘出多少种图案?LeetCode 351. Android Unlock Patterns
- 使用Ngrok配置免费的外网域名
热门文章
- 伦巴时间步的动作要领_成人拉丁舞_伦巴、恰恰、桑巴舞、牛仔舞、斗牛舞
- android改变textview文字,如何在Android TextView中更改文本
- win7系统不能加入工作组计算机,技术员教你解决win7系统工作组计算机无法访问的修复办法...
- python pandas series_Python Pandas 系列Series
- 凯撒密码的实践使用-2--加密,解密的python代码事项
- 学生选课系统代码-1start.py代码
- SQL 怎么创建一个只有查询数据库用户权限呢
- bp神经网络数字识别matlab_基于Matlab的BP神经网络识别26个英文字母
- java 属性类_类和对象系列教材 (九)- Java的类属性,静态属性
- 可以两个人协作一个项目吗_两个人分手了,还可以继续做朋友吗?