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为最小可用文件,来实现了重定向,用文件描述符复制实现重定向。

 

相关文章
|
缓存 Linux
[cmake] ---- set_property
[cmake] ---- set_property
475 1
|
网络协议 Linux 开发工具
配置Linux固定IP地址,为什么要固定IP,因为他是通DHCP服务获取的,DHCP服务每次重启都会重新获取一次ip,VMware编辑中有一个虚拟网络编辑器
配置Linux固定IP地址,为什么要固定IP,因为他是通DHCP服务获取的,DHCP服务每次重启都会重新获取一次ip,VMware编辑中有一个虚拟网络编辑器
|
人工智能 自然语言处理 前端开发
人工智能如何影响前端开发
【6月更文挑战第1天】人工智能如何影响前端开发
390 3
|
JavaScript 前端开发 Python
js中null和undefined的区别是什么
js中null和undefined的区别是什么
289 3
|
JavaScript
TypeScript清空数组的4种方法
TypeScript清空数组的4种方法
1060 0
|
监控 安全 机器人
Grafana 安装启用和钉钉报警
Grafana 安装启用和钉钉报警
2560 0
Grafana 安装启用和钉钉报警
|
存储 SQL NoSQL
[MySQL binlog实战] 增量同步与数据搜索~从入门到精通
[MySQL binlog实战] 增量同步与数据搜索~从入门到精通
688 0
|
Rust Unix
rust 日期和时间格式化输出
rust 日期和时间格式化输出
390 0
|
机器学习/深度学习 人工智能 达摩院
二十年来第一次!CVPR最佳学生论文授予中国高校学生
二十年来第一次!CVPR最佳学生论文授予中国高校学生
398 0
|
机器学习/深度学习 编解码 人工智能
ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测
我相信大家不多不少都会看过我自己做的一些工作,同时也还有我解读RGB-Thermal系列的一些工作,所以这一期我想讨论一下RGB-T目标检测的工作!
ECCV2022 | 多模态融合检测新范式!基于概率集成实现多模态目标检测