重定向-缓冲区

1.重定向
文件描述符对应的分配规则是什么?
尝试用这个代码 关闭0,1,2文件描述符,看看有什么现象?关闭哪个,你打开的文件fd应该就是哪个
在这里插入图片描述
结论:
从0下标开始,寻找最小的没有没使用的数组位置,它的下标就是新文件的文件描述符

如果先关闭1,再打开log.txt,那么根据文件描述符分配规则,新打开的文件被分配到了下标1
此时write不管就往1号下标里面写入,则此时现象就是本来应该向显示器文件写出,但现在是往文件log里面写
在这里插入图片描述
这就是重定向的原理,但是这样做太挫了
我们可以利用系统调用dup2来复制文件描述符表数组中下标对应的内容
在这里插入图片描述
dup2的接口形参设计的不好,和我们认为的新旧正好相反,但是有了这句 newfd be the copy of oldfd,new是old的拷贝,则得出最后只剩一个oldfd
按照重定向结果,最后一定只剩fd这个新打开的地址,则oldfd 传 fd , newfd 传 1,这样也完成了重定向 >。
代码:
00
追加重定向 >>
在这里插入图片描述
输入重定向:
系统调用read
在这里插入图片描述

在这里插入图片描述
本来read(0,…) 应该从键盘读入,现在从文件里面读入
在这里插入图片描述

重定向的本质:
对进程的指定文件描述符表进行内核级别的对文件描述符表中的地址进行拷贝的问题
这就叫输入输出重定向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 双目相机矫正代码

关于双目相机的矫正功能,博主有c和python 的代码片。 python的比较简洁,一目了然。 整理一下放在这里。 需要的人可以自取,希望已经造好的轮子可以帮助大家节省开发时间,去做更多的事情。 如果搬运代码到自己的博客,希…

构建mono-repo风格的脚手架库

前段时间阅读了 https://juejin.cn/post/7260144602471776311#heading-25 这篇文章;本文做一个梳理和笔记; 主要聚焦的知识点如下: 如何搭建脚手架工程如何开发调试如何处理命令行参数如何实现用户交互如何拷贝文件夹或文件如何动态生成文件…

Linux内核input子系统详解

目录 1 input子系统整体架构 2 input子系统驱动框架分析 2.1 怎么添加input_dev 2.2 input_dev和input_handler匹配后,connec函数做了什么 3 input子系统读数据流程 3.1 open输入设备流程 3.2 read读取输入事件流程 4 应用程序读取的输入数据是怎样的 4.1 …

chap认证带客户端IP分配案例

PPP协议两边的网段可以不在同一个网段,因为数据链路帧用0xff表示帧,不用arp,所以可以不同网段。 R1: aaa local-user test password cipher admin local-user test service-type ppp interface Serial4/0/0 link-protocol ppp pp…

Git 标签(Tag)实战:打标签和删除标签的步骤指南

目录 前言使用 Git 打本地和远程标签(Tag)删除本地和远程 Git 标签(Tag)开源项目标签(Tag)实战打标签删除标签 结语开源微服务商城项目前后端分离项目 前言 在开源项目中,版本控制是至关重要的…

在钣金加工领域,迅镭激光切割机广泛使用的原因和优点何在?

激光切割工艺和激光切割设备正在被广泛的板材加工企业逐渐理解并接受,凭借其高效率的加工、高精度的加工、优质的切割断面、三维切割能力等诸多优势,逐步取代了传统的钣金切割设备。 苏州迅镭激光科技有限公司推出的激光切割设备的柔性化程度高&#xff…

Centos下用nodejs实现一个简单的web服务器

WebRTC是音视频直播中最常用的一个框架,在使用的过程中,我们就需要实现一个服务器端。本文以nodejs实现一个服务器为例,讲述一下在centos下如何用nodejs实现一个简单的web服务器。 一、安装nodejs 在linux环境下安装nodejs有多重方式&#x…

python转xml为json

以下代码取自获取PA防火墙策略XML文件并转为JSON文件的场景: 通过PA防火墙API获取防火墙策略 防火墙策略xpath为./result/security/rules/entry 以下代码实现将所有entry即策略与策略相关属性转为json对象并存储至文件 import xml.etree.ElementTree as ET import …

Tomcat为什么支持线程池?

Tomcat作为一个Java Servlet容器,支持线程池是因为它能够处理多个并发请求。这些请求可以是对Web应用程序的HTTP请求、Servlet的请求,或其他支持的协议。 支持线程池的主要原因包括: 并发处理能力: 提高性能: 使用线程…

消息中间件——RabbitMQ(二)各大主流消息中间件综合对比介绍!

前言 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka&a…

函数参数的最佳传递方式与现代C++的规则

函数参数的最佳传递方式与现代C的规则 在C中,如何最佳地传递函数参数以及如何处理类的特殊成员函数,一直是优化性能和代码质量的重要话题。下面我将详细解释这些概念。 使用移动语义实现 Swap 函数 移动语义(Move Semantics)能…

数据库概述 -- 数据模型知识点要点详解

数据模型 概述概念数据特征组成要素分类概念层数据模型逻辑层数据模型物理层数据模型 主页传送门:📀 传送 概述 数据模型是对现实世界数据特征的抽象,它描述了数据的结构、操作和约束条件,为数据库系统的信息表示与操作提供一个抽…

JWT

目录 JWT组成 第一部分header 第二部分payload 第三部分signature 注意 JWT认证算法:签发和校验 drf使用jwt drf项目的jwt认证开发流程 drf-jwt安装和简单使用 安装 简单使用 drf-jwt使用 jwt内置类JSONWebTokenAuthentication 控制使用jwt的登录接口…

【计算机网络】计算机网络和因特网

一.基本术语介绍 端系统通过通信链路(communication link)和分组交换机(packet switch)连接到一起,连接这些端系统和分组交换机的物理媒体包括:同轴电缆,铜线,光纤和无线电频谱。而…

人工智能基础_机器学习014_BGD批量梯度下降公式更新_进一步推导_SGD随机梯度下降和MBGD小批量梯度下降公式进一步推导---人工智能工作笔记0054

然后我们先来看BGD批量梯度下降,可以看到这里,其实这个公式来源于 梯度下降的公式对吧,其实就是对原始梯度下降公式求偏导以后的梯度下降公式,然后 使用所有样本进行梯度下降得来的,可以看到* 1/n 其实就是求了一个平均数对吧.所有样本的平均数. 然后我们看,我们这里* 1/n那么…

Istio实战(十二)-Istio 延长自签发证书的有效期

因为历史原因,Istio 的自签发证书只有一年的有效期。如果你选择使用 Istio 的自签发证书,就需要在它们过期之前订好计划进行根证书的更迭。根证书过期可能会导致集群范围内的意外中断。 我们认为每年更换根证书和密钥是一个安全方面的最佳实践,我们会在后续内容中介绍如何完…

启用NTP服务解决Linux系统时间与北京时间不同步问题

一、背景 1、服务器的Linux版本为Linux version 4.18.0-348.7.1.el8_5.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)) #1 SMP Wed Dec 22 13:25:12 UTC 2021 2、NTP即Network Time Protocol(网络时间协议&am…

webpack 与 grunt、gulp 的不同?

结论先行: Webpack、Grunt 和 Gulp 都是前端开发中常用的构建工具,但是 Webpack 是基于模块化打包的工具,并支持模块化开发。而 Grunt 和 Gulp 都是基于任务的构建工具,自动执行指定的任务,但不支持模块化开发。 1、相…

JavaScript设计模式之适配器模式

一般为了解决不兼容的问题,把一个类的接口换成我们想要的接口,类似于转换器。 举个例子: 我想听歌的时候,我发现我没带耳机,我的手机是 iphone 的,而现在我只有一个 Type-C 的耳机,为了能够听歌…

Unity3D与iOS的交互 简单版开箱即用

本文适合的情况如下: Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…