Dup 文件描述符复制|学习笔记

简介: 快速学习 Dup 文件描述符复制

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Dup 文件描述符复制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11030


Dup 文件描述符复制

 

内容介绍:

一、文件描述符的复制

二、dup 函数

 

一、文件描述符的复制

dup和dup2是两个非常有用的系统调用,都是用来复制一个文件的描述符,使新的文件描述符也标识旧的文件描述符所标识的文件。

Int dup(int oldfd)——dup为所要复制的文件描述符,返回新的文件描述符和oldfd都标识同一个文件,即oldfd所标识的文件。即有两个文件符代表同一个文件符。

系统分配的文件符

Int dup2(int oldfd , int newfd)——个人指配的( oldfd与newfd都代表oldfd所代表的文件,返回值成功返回newfd,失败则返回负值)

dup 和 dup2经常用来重定向进程的stdin(标准输入)、stdout(标准输出)和stderr(标准错误输出)

回顾:Is>test.txt

重定向:

用到了dup和dup2的功能。本来输出到屏幕上,而输出到文件(text.txt)中,输出方向被改变。

image.gif1为默认标准输出文件(屏幕),3代表test.txt。只需要1不代表标准输出,代表test.txt

之后printf时默认在1代表的文件中写内容,则默认写入test.txt中。所以要想printf打印的东西不在屏幕上,只需让1代表别的文件。

 

二、dup 函数

#include

int dup(int oldfd)

1. 功能:

复制oldfd文件描述符,并分配一个新的文件描述符,新的文件描述符是调用进程文件描述符表中最小可用的文件描述符。

2. 参数:

要复制的文件描述符oldfd。

3. 返回值:

成功—新文件描述符

失败—返回-1,错误代码存于errno中

代码如下:

#include

#include

#include

#include

#include

int main(int argc, char *argv[])

{

int fd ,new_fd;

fd=open(“./test.txt”,O_RDWR);

if(fd<0)

{

perror(“open”);

return 0;

}

close(1);

new_fd = dup(fd);//复制文件描述符得到新的文件描述符,最小可用的为new_fd,为1从而实现重定向。

printf(“new_fd=%d\n”,new_fd);

printf(“hello world\n);

write(1,”hello kitty”,11);

return 0;

}

输出结果为:

hello kittynew fd=1

hello world

原因:“hello kitty”是用write写入的,没有缓冲。

printf打印的地方为缓冲区。先将write写到test.txt当中,然后输出new fd,再打hello world。

new fd为最小可用文件,来实现了重定向,用文件描述符复制实现重定向。

 

相关文章
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI赋能教育评价改革:生成式人工智能(GAI)认证的角色与影响
本文探讨了人工智能(AI)技术在教育评价改革中的作用及生成式人工智能(GAI)认证的影响。随着数字化时代的到来,AI为教育评价提供了新工具与手段,能够优化评价过程、提升质量并促进个性化发展。GAI认证不仅提升了教育工作者的技能与竞争力,还推动了教育评价的标准化与规范化。文章强调需加强AI技术应用研究、推广GAI认证,并注重评价的个性化与差异化,以助力学生全面发展。AI赋能教育评价改革是未来趋势,将为教育事业注入更多智慧与力量。
|
缓存 Linux
[cmake] ---- set_property
[cmake] ---- set_property
502 1
|
运维 Devops 人工智能
AI赋能DevOps:数据驱动的全栈工程师实践
DevOps是什么? 对于传统的软件研发而言,开发,测试,运维,运营,有不同的岗位进行分工协作,以保证质量和专业度,同一件事情,依赖不同岗位的排期、沟通、协调,效率难免会有打折。而对于互联网业务来说,快速的迭代,对人力的需求非常强烈,不大可能有足够的人力支撑这么多岗位。
10576 0
|
JavaScript
TypeScript清空数组的4种方法
TypeScript清空数组的4种方法
1092 0
|
监控 安全 机器人
Grafana 安装启用和钉钉报警
Grafana 安装启用和钉钉报警
2707 0
Grafana 安装启用和钉钉报警
|
Rust Unix
rust 日期和时间格式化输出
rust 日期和时间格式化输出
411 0
|
搜索推荐
介绍一下阿里云的企业财务管理功能
阿里云多账号的财务管理。
1151 0
介绍一下阿里云的企业财务管理功能
|
机器学习/深度学习 编解码 人工智能
ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测
我相信大家不多不少都会看过我自己做的一些工作,同时也还有我解读RGB-Thermal系列的一些工作,所以这一期我想讨论一下RGB-T目标检测的工作!
ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测
|
网络协议 网络架构
计算机网络的七层结构、五层结构和四层结构
计算机网络的七层结构、五层结构和四层结构
1079 0
计算机网络的七层结构、五层结构和四层结构
阿里云注册域名创建信息模板流程及审核时间说明
阿里云注册域名所有者没有信息模板,新创建的信息模板已经提交,审核需要多长时间?着急
533 0
阿里云注册域名创建信息模板流程及审核时间说明