【Linux】基础IO_1

文章目录

  • 六、基础IO
    • 1. C语言的文件接口
    • 2. 系统文件I/O
  • 未完待续


六、基础IO

1. C语言的文件接口

我们知道 文件 = 文件内容 + 文件属性 。即使是一个空文件,仍然会在磁盘中占据空间。那打开文件是什么意思呢?其实文件打开的意思就是:将文件从磁盘中加载到内存中。 文件跟程序一样,被操作系统使用内核数据结构给管理起来了,对文件的操作就转变为对文件的调度。
我们接下来熟悉和使用C语言中的文件接口。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参数:
在这里插入图片描述

“r”:只读方式打开文件,文件必须存在。
“w”:写入方式打开文件,如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
“a”:追加方式打开文件,如果文件存在,写入数据时定位到文件末尾;如果文件不存在,则创建新文件。
“rb”:以二进制只读方式打开文件。
“wb”:以二进制写入方式打开文件。
“ab”:以二进制追加方式打开文件。

不知道大家还记得Linux中的重定向符不,>输出重定向,<输入重定向,>>追加重定向。
在这里插入图片描述
重定向符和文件流非常相似,他俩肯定有莫大的关系。既然知道了写操作,我们接下来看看文件读取操作。
在这里插入图片描述
在这里插入图片描述

2. 系统文件I/O

我们从键盘接收输入,打印到显示器上,但键盘和显示器都是硬件资源,他们统统被操作系统所管理,我们的文件(进程)无法绕过操作系统打开这些资源,所以操作系统必须要提供一些接口来支持文件访问。
在这里插入图片描述
我们来用一用:
在这里插入图片描述
在这里插入图片描述
接下来看看怎么写和怎么关闭:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
open系统调用接口传递标志位(本质是宏)时,还有其他的标志位。
在这里插入图片描述
在这里插入图片描述

我们系统调用接口中都需要 fd 这个参数,这个参数是文件标识符,确定文件的参数。在操作系统内部,进程PCB中存储着一个结构体指针,指向一个文件描述符表,这个表是一个结构体指针数组,内部存的是文件结构体指针,分别指向不同的打开的文件。而这个 fd 就是这个文件表结构体的下标,确定文件。
在这里插入图片描述
一般来说,fd = 0 是标准输入文件流(键盘文件),1 是标准输出文件流(显示器文件), 2 是标准错误文件流(显示器文件)。

fd的分配规则:最小的没有被使用的数组下标,会被分配给最新打开的文件。 所以我们可以:close(1),即关闭stdout流,然后新打开的文件的fd就是1,但是输出函数并不知道,向显示器打印的字符串统统转变成向文件内写入。就实现了重定向的功能。
在这里插入图片描述
这里 dup2 函数可以方便实现重定向的功能。


未完待续

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上海舆情分析软件的功能和对企业的意义

随着互联网的飞速发展&#xff0c;人们参与讨论、发声的途径与评率也越来越多&#xff0c;在为自己发声的同时&#xff0c;公众舆论也成为企业获取民意&#xff0c;改进发展的重要参考。 上海 舆情分析软件的开发&#xff0c;为企业获取舆论&#xff0c;调查研究提供了便捷化的…

探寻Scala的魅力:大数据开发语言的入门指南

大数据开发语言Scala入门 一、引言1.1 概念介绍1.2 Scala作为大数据开发语言的优势和应用场景1.2.1 强大的函数式编程支持1.2.2 可与Java无缝集成1.2.3 高性能和可扩展性1.2.4 大数据生态系统的支持 二、Scala基础知识2.1. Scala简介&#xff1a;2.1.1 Scala的起源和背景2.1.2 …

【Win】USB设备连接与移除的实时追踪

在这个信息爆炸的时代&#xff0c;USB设备成了我们不可或缺的数据伴侣。但你有没有想过&#xff0c;当你的USB突然消失&#xff0c;或者你不确定它何时被拔出&#xff0c;这可能会让你陷入困境。别担心&#xff0c;即使Windows系统没有默认提供监控功能&#xff0c;我们也可以轻…

fairseq (Facebook AI Research) 包

0. Abstract 最近在看一个用 RNNs 网络做 Translation 任务的程序, 关于数据处理部分, 主要用到工具包 sentencepiece 和 fairseq, 前者主要是对文本进行分词处理, 后者则是对已分词的文本进行二进制化和快速加载. 包越方便使用, 就说明包装得越狠, 也就越令人一头雾水, 本文简…

巧用newSingleThreadExecutor让异步任务顺序跑

背景 Flume 是 Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统 。一个用来控制 Flume 采集任务的 Web 应用&#xff0c;需要对任务进行管理&#xff0c;主要操作「启动、停止、新建、编辑、删除」&#xff0c;本质就是对…

神经网络实战2-损失函数和反向传播

其实就是通过求偏导的方式&#xff0c;求出各个权重大小 loss函数是找最小值的&#xff0c;要求导&#xff0c;在计算机里面计算导数是倒着来的&#xff0c;所以叫反向传播。 import torch from torch.nn import L1Lossinputstorch.tensor([1,2,3],dtypetorch.float32) targe…

品牌策划背后的秘密:我为何对此工作情有独钟?

你是否曾有过一个梦想&#xff0c;一份热爱&#xff0c;让你毫不犹豫地投身于一个行业&#xff1f; 我就是这样一个对品牌策划充满热情的人。 从选择职业到现在&#xff0c;我一直在广告行业里“混迹”&#xff0c;一路走来&#xff0c;也见证了许多对品牌策划一知半解的求职…

RubyMine 2024 mac/win版:智慧编程,从心出发

JetBrains RubyMine 2024 是一款专为Ruby和Rails开发者打造的高效集成开发环境(IDE)。它凭借其卓越的性能和丰富的功能&#xff0c;帮助开发者在Ruby和Rails的开发过程中提升效率&#xff0c;减少错误。 RubyMine 2024 mac/win版获取 RubyMine 2024 提供了强大的代码编辑功能&…

mp4转换成mp3怎么转?教你几种值得收藏的转换方法!

mp4转换成mp3怎么转&#xff1f;MP4&#xff0c;这一深入人心的数字多媒体容器格式&#xff0c;无疑在当今数字世界中占据了一席之地&#xff0c;那么&#xff0c;它究竟有何过人之处呢&#xff1f;首先&#xff0c;MP4的跨平台兼容性是其一大亮点&#xff0c;不论是在Windows的…

免费的AI在线写作工具,让写作变的更简单

在如今的时代&#xff0c;写作已经成为了我们日常生活中不可或缺的一部分。无论是自媒体创作者、学生还是办公职场人员&#xff0c;都有内容创作的需求。然而&#xff0c;写作过程往往伴随着灵感枯竭、查找资料费时等问题。下面小编就来和大家分享几款免费的AI在线写作工具&…

cube studio开源一站式机器学习平台:k3s部署cube-studio

全栈工程师开发手册 &#xff08;作者&#xff1a;栾鹏&#xff09; 一站式云原生机器学习平台 前言 开源地址&#xff1a;https://github.com/tencentmusic/cube-studio cube studio 腾讯开源的国内最热门的一站式机器学习mlops/大模型训练平台&#xff0c;支持多租户&…

超级缓存神器:Memcached解密 - 加速你的网站速度

Memcached介绍和详解 1. 简介1.1 什么是Memcached1.2 Memcached的目标和特点1.3 Memcached的优势和适用场景 2. 架构和原理2.1 Memcached的客户端-服务器模型2.2 Memcached的内存存储结构2.3 Memcached的数据访问和数据存储流程2.3.1 数据访问流程2.3.2 数据存储流程 3. 安装和…

爆了!5个yyds的开源项目!

朋友们&#xff0c;今天我要来跟大家聊聊几个超级棒的开源项目&#xff0c;简直是yyds级别&#xff0c;绝对让你眼前一亮&#xff01;美图镇楼~ 01. Motrix——全能下载管家 下载资源太麻烦&#xff1f;试试Motrix吧&#xff01;这是一款功能强大的下载工具&#xff0c;支持HT…

湖南省物联网挑战赛教学平台使用说明文档

1物联网教学平台硬件连接 1.1硬件介绍 1&#xff09;物联网教学平台实验箱 2&#xff09;物联网硬件平台 3&#xff09;无线传感器节点 4&#xff09;智能烧录平台 1.2连线 注&#xff1a;智能烧录平台上的USB接口必须与物联网硬件平台“开关”那一面最右侧USB接口连接 1.3修…

【Sa-Token|4】Sa-Token微服务项目应用

若微服务数量多&#xff0c;如果每个服务都改动&#xff0c;工作量大&#xff0c;则可以只在网关和用户中心进行改动&#xff0c;也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token&#xff0c;并将其与现有的 Token关联存储在 Redis 中。用户中心…

[Linux]缓冲区

一、概念 缓冲区&#xff0c;也称为缓存&#xff0c;是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;用来缓冲输入或输出的数据。这个保留的空间称为缓冲区。 缓冲区的主要作用就是提高效率&#xff1a; 提高使用者的效率&#xff0…

JAVA SDK 整合 AI 大语言模型

目前主流模型厂商的 SDK 并没有很好的支持 JAVA 环境&#xff0c;主流还是使用的 Python &#xff0c;如果希望将 AI 功能集成到业务中来&#xff0c;则需要找找有没有一些现成的开源项目&#xff0c;但是这种项目一般需要谨慎使用&#xff0c;以防有偷取 app_key 等风险问题 前…

初阶 《操作符详解》 8. 逻辑操作符

8. 逻辑操作符 &&   逻辑与 ||   逻辑或 逻辑与和或的特点&#xff1a; &&左边为假&#xff0c;右边就不计算了 || 左边为真&#xff0c;右边就不计算了 例&#xff1a;360笔试题 #include <stdio.h> int main() {int i 0, a 0, b 2, c 3, d 4…

2024.6.24 IDEA中文乱码问题(服务器 控制台 TOMcat)实测已解决

1.问题产生原因&#xff1a; 1.文件编码不一致&#xff1a;如果文件的编码方式与IDEA设置的编码方式不一致&#xff0c;就会产生乱码。确保文件和IDEA使用相同的编码&#xff0c;通常是UTF-8。2.IDEA设置问题&#xff1a;检查IDEA的全局编码设置和项目编码设置是否正确。3.终端…

Springboot整合Mongodb(含使用案例)

基础语法 插入 插入单条 // 插入一条数据到 "Books" 集合 db.Books.insertOne({title: "如何使用MongoDB",author: "IT小辉同学",year: 2023 })插入多条数据 // 插入十条数据到 "Books" 集合 db.Books.insertMany([{ title: "…