高级I/O-----dup/dup2
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,dup/dup2dup/dup2是两个用于指定文件操作符的方法,作用很相似,它是得两个文件描述符指向同一个file结构体,使file的引用计数为2,所以在使用的时候我们需要手动关闭另外一个不需要的。d
千家信息网最后更新 2025年12月02日高级I/O-----dup/dup2
dup/dup2
dup/dup2是两个用于指定文件操作符的方法,作用很相似,它是得两个文件描述符指向同一个file结构体,使file的引用计数为2,所以在使用的时候我们需要手动关闭另外一个不需要的。
dup:
dup的作用是将文件描述符指向一个最小的文件描述符。
#includeint dup(int oldfd); int dup2(int oldfd, int newfd);
因为比较简单,就从代码来看吧
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 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 #include2 #include 3 #include 4 #include 5 #include 6 #include 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一样
总结:
当需要往标准输出上打的调试信息,可以使用重定向的方式让它输出到相应的文件中。
文件
指向
输出
两个
作用
最小
相似
代码
信息
只有
手动
操作符
效果
效果图
方式
方法
时候
标准
看吧
结构
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手机网络安全等级设置
进京证内部服务器错误是什么原因
网络安全知识舞蹈
每个块被复制到多个块服务器上
网络技术转让是什么
数据库把时间转成时分秒
autoeq数据库使用
经信局对企业网络安全的考核
千兆多画面轮循监测服务器
uml怎么画数据库关系图
数据库的网页显示
报关软件开发行业 风险
网络安全概念股格尔软件
江西综合软件开发市价
葫芦侠实行网络安全
数据库创建部门表用英文怎么说
日立服务器怎么查故障代码
燃烧的远征转服务器声望会清零吗
数据库字段是行吗
nist数据库检索kI
gof3无法连接服务器
输入的数据库无效
服务器有什么优势
海南标准机架服务器在哪买
红河仁华软件开发
江苏省技能大赛网络技术
走进企业网络安全
创建数据库的命令格式为
网络安全红蓝对抗题目
软件开发后还能干什么