Linux基础IO——重定向与文件缓冲区

news2024/9/25 4:36:27

文章目录

    • 重定向
      • 重定向的系统调用
      • C语言中的FILE结构体
    • 文件缓冲区
      • C语言缓冲区

重定向

我们在学习Linux的基本内容时候,知道>> >都可以用来表示重定向,那么重定向的本质是什么呢,其实就是更改了标号为1的文件描述符

1表示标准输出,那么我们也就可以手动实现输出重定向,将标准输出更改为我们指定的文件

  1 #include<unistd.h>
  2 #include<sys/types.h>
  3 #include<sys/stat.h>
  4 #include<fcntl.h>
  5 #include<stdio.h>
  6 
  7 int main()
  8 {
  9   close(1);
 10   int fd = open("log.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
 11   printf("关闭1之后新建文件标识符为%d\n",fd);
 12   fprintf(stdout,"输出到更改后的标准输出\n");               
 13   return 0;
 14 }

请添加图片描述

那么重定向的本质是什么,他究竟做了什么操作呢

其实就是跟我们前一节内容所讲的一样,通过修改文件描述符表,修改文件描述符到指定文件的指针即可,也就是修改文件描述符下标为1的数组内容,改成到你想要的文件即可

重定向的系统调用

如果每一次我们想要重定向都需要写上面那些个代码,先关闭再打开,这样一点都不优雅

操作系统也是这样想的,于是就有了dup和dup2这两个系统调用

请添加图片描述

其实就是传递给他文件描述符,dup是直接关了,dup2是讲oldfd拷贝给newfd,这样你原本想输出给oldfd的内容就输出给了newfd

C语言中的FILE结构体

因为程序语言的所有操作其实都是通过操作系统提供的系统调用来完成的

我们就可以推断出,C语言提供的所有IO相关函数都与系统调用的接口对应,从本质上,所有访问文件的操作都是通过文件描述符fd来访问的

因此在C语言的FILE结构体中,也一定存着文件描述符fd

文件缓冲区

IO设备的读写速度是远低于内存和CPU的运转速度的,这其实就说明了缓冲区的重要性,不要让CPU和内存频繁访问IO设备,多和文件缓冲区打交道,当满足条件的时候,一起传递给外设即可

C语言缓冲区

我们说当满足一定条件就传递信息,这个一定条件具体指的是什么呢

缓冲区其实就可以理解为操作系统提供的一段内存,一般有三种条件

  • 当缓冲区收到信息时立即传递——立即刷新
  • 当缓冲区存到了一定量(cache)时传递——行刷新
  • 当缓冲区存满了时传递——满刷新

当然还有一些其他情况,比如说进程关闭时刷新,调用系统调用时刷新

一般操作系统里面都是看情况用的,例如显示器就选择行刷新,因为要注重用户体验,访问磁盘时则是满刷新,效率更重要一点

因此当标准输出重定向到普通文件时,行刷新就变成了满刷新

还有我们之前提到的’\n’会自动刷新缓冲区,如果有竞赛经验的同学也知道可以关闭自动缓冲区刷新来节省时间,fflush函数可以强制刷新缓冲区

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

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

相关文章

虚实共生:数字孪生技术引领设施农业新未来

在全球人口持续增长和气候变化日益严峻的背景下,设施农业正面临前所未有的挑战和机遇。如何在有限的资源条件下提高作物产量、质量和生产效率,成为困扰农业从业者的核心问题。随着人工智能、物联网和大数据等新兴技术的快速发展,数字化转型为设施农业带来了新的希望。其中,数字…

如何为树莓派添加人工智能超能力!

Raspberry Pi AI 套件价格实惠&#xff0c;安装简单&#xff0c;只要你能找到一个。 Adrian Kingsley-Hughes/ZDNET ZDNET 的关键要点 Raspberry Pi 基金会发布了适用于 Pi 5 的 Raspberry Pi AI 套件&#xff0c;但供应情况并不稳定。在撰写本文时&#xff0c;我在亚马逊和芝…

跟《经济学人》学英文:2024年08月03日这期 What is the point of industry awards?

What is the point of industry awards? Booze, sweat and plexiglass booze&#xff1a;美 [buz] 酒精饮料&#xff1b;烈酒&#xff1b;<俚>喝酒 sweat&#xff1a;英 [swet] 汗水&#xff1b;辛勤劳动 注意发音 plexiglass&#xff1a;美 [pleksɪˌglɑs] 树脂玻…

“消费新纪元:探索‘消费增值’的无限可能“

亲爱的顾客们&#xff0c;你们好&#xff01;今天&#xff0c;我想深入谈谈一种正在革新我们消费体验的模式——我们称之为“消费增值”。这个模式不仅仅保留了购物的乐趣&#xff0c;更在每一笔交易中融入了额外的价值&#xff0c;让消费过程焕发新生。 长久以来&#xff0c;我…

Google 高级搜索操作符

在 Google 搜索中&#xff0c;有些高级搜索操作符&#xff0c;它可以帮助你找到特定类型的文件。以下是一些常见的搜索操作符及其用途&#xff1a; filetype: — 搜索特定类型的文件。例如&#xff1a; filetype:pdf 人工智能 可以找到所有包含“人工智能”的 PDF 文件。 filet…

天机学堂 第6天 点赞逻辑

首先我们来分析整理一下点赞业务的需求&#xff0c;一个通用点赞系统需要满足下列特性&#xff1a; 通用&#xff1a;点赞业务在设计的时候不要与业务系统耦合&#xff0c;必须同时支持不同业务的点赞功能 独立&#xff1a;点赞功能是独立系统&#xff0c;并且不依赖其它服务。…

RM小陀螺技术经验与思考

移动小陀螺的原理&#xff1a; 先调好云台&#xff0c;车移动云台方向不动。然后可以用电机和底盘的机械角度来计算 涉及到两个知识点&#xff1a;速度闭环和变换矩阵。。。 把mpu的值映射到脉轮上面&#xff0c;就是说根据yaw电机编码器和mpu的差值来计算麦轮解算的x 和y的移…

开发android app用于移远模块读写IMEI 模组EC200DEULA-D08-SNNDA 支持socket连接读写IMEI

开放权限 adb kill-serveradb rootadb shell setenforce 0adb install -t app-debug.apkadb shell am start -n com.azhon.spplus/.MainActivity::F310A_WriteIMEI -DWadb.exe forward tcp:5902 tcp:5902pause写读IMEI ADB socket协议 TCP 127.0.0.1:5902 PC与终端APP之间 j…

商业数据分析PPT制作大纲系列一进入数据分析世界(需PPT私)

PART 1数据挖掘:从海量信息中淘出真金 数据挖掘是在海量的数据中发现有价值信息和知识的过程。它就像是一位经验丰富的矿工,在堆积如山的数据矿石中,精准地筛选出珍贵的金子。 引言: 数据挖掘的定义与价值技术概览: 关键算法(如决策树、K-means聚类、关联规则); 步骤…

简单搭建vue项目

1.先安装node.js和vite&#xff0c;具体参考&#xff1a; 2.管理员身份运行cmd&#xff0c;跳转到node安装目录&#xff1a; 输入&#xff1a; npm create vitelatest 输入项目名称&#xff0c;选择vue和JavaScript 2.VisualStudioCode打开(可能需要管理员权限)创建的文件夹,点…

Sqlserver 备份表

Sqlserver 备份表 1、右键数据库->任务->生成脚本 2、在引导界面点击下一步 3、选择需要导出的表 4、在高级里面选择备份数据与架构&#xff0c;然后再单选每个对象一个文件 每个对象一个文件是有多个表的情况下备份成多个文件&#xff0c;否则所有表都在一个文件中 架…

告别盲目找货!以图搜货神器,精准定位全网低价同款货源

做生意进入图搜源头时代&#xff0c;图搜进货实现了商机“所见即所得”。一位短视频平台的服装商家说&#xff0c;平时她看到同行的一个爆款&#xff0c;不好意思打听货源&#xff0c;也很难打听到&#xff0c;现在只要截个图一搜&#xff0c;就能找到1688对应的源头工厂。 今…

【第17章】Spring Cloud之Gateway服务调用

文章目录 前言一、用户服务二、网关服务1. 负载均衡2. 服务调用3. 登录拦截器 三、单元测试1. 启动服务2. 用户不存在3. 正常登录 总结 前言 在上一章我们使用JWT简单完成了用户认证&#xff0c;【第16章】Spring Cloud之Gateway全局过滤器(安全认证)&#xff0c;上一章内容已…

Node.js是什么?如何安装

目录 一、前言 1、JavaScript语言-----前端开发 2、JavaScript语言-----后端开发 总结&#xff1a;如果我们写了一段 js 代码&#xff0c;把他放到浏览器中执行&#xff0c;是在做前端开发&#xff1b;如果放在Node.js下运行&#xff0c;是在做后端开发。 二、安装 1、打开…

GHOST重装系统后的分区失踪:数据恢复实战指南

一、引言&#xff1a;GHOST重装引发的数据隐忧 在计算机维护的众多手段中&#xff0c;GHOST重装系统以其高效、便捷的特点深受用户喜爱。然而&#xff0c;这一过程往往伴随着风险&#xff0c;其中之一便是分区丢失的隐患。当GHOST重装操作不当或遭遇意外情况时&#xff0c;原本…

制作喇叭接口拓展

今天发现音响只有两个音频输出口&#xff0c;而喇叭有三个&#xff0c;就想着改装成可以装三个&#xff0c;电脑桌上一个&#xff0c;脚底下两个&#xff0c;从抽屉里翻出来了一个电视上拆下来的三色莲花口&#xff0c;它本来是一个视频输入&#xff0c;两个音频输入&#xff0…

硬币计数器——Arduino

硬币计数器——Arduino 硬币计数盒模型计数传感器硬币计数盒接线计数器程序 硬币计数盒模型 计数传感器 硬币计数盒接线 计数器程序 // 包含TM1637库&#xff0c;这是一个用于驱动TM1637数码管的模块 #include <TM1637.h>// 使用volatile关键字声明布尔变量jishu&#x…

Redis远程字典服务器(1)—— 初识Redis

目录 一&#xff0c;关于Redis 二&#xff0c;Redis特性介绍 2.1 In-memory data structures&#xff08;在内存中存储数据&#xff09; 2.2 Programmablilty&#xff08;编程能力&#xff09; 2.3 Extensibility&#xff08;扩展能力&#xff09; 2.4 Persistence&#…

食家巷小程序:传统面点与平凉特产的美味盛宴

在美食的世界里&#xff0c;总有一些角落等待着我们去探索&#xff0c;而食家巷小程序就是这样一个为您开启美食宝藏的钥匙。 一、传统面点&#xff0c;传承千年的美味 食家巷小程序为您呈现了种类丰富的传统面点&#xff0c;每一款都蕴含着深厚的历史和文化底蕴。 平凉锅盔&…

x-cmd mod | x jina - 为 jina.ai 打造的命令行工具,提供获取网页内容、生成向量数据等等

目录 简介主要特点子命令例子 简介 Jina.ai 是一家专注于大型语言模型和媒体处理公司。基于 jina.ai 公司的接口&#xff0c;jina 模块主要提供了以下功能&#xff1a; 网页内容获取生成文本向量相关信息检索排序检索 主要特点 通过 jina模块的 Reader 功能&#xff0c;我们…