【Linux】:基础IO

news2025/1/20 1:47:14

基础IO

  • 一.C语音文件操作
    • 1.fopen
    • 2.fwrite
    • 3.fopen以a方式打开
  • 二.Linux下一切皆文件
  • 三.系统调用接口
  • 四.文件描述符-fd

共识原理:

1.文件=属性+内容。
2.文件分为打开文件和未打开文件。
3.打开的文件:进程打开。
4.未打开的文件:在磁盘里存放着。
5.文件打开,必须先被加载到内存。
6.一个进程可以打开多个文件,那么操作系统就必须先描述再组织的对文件进行管理。

一.C语音文件操作

1.fopen

在这里插入图片描述

fopen打开的文件如果不存在则会在当前路径下创建一个该文件,当前路径指的是进程路径。

在这里插入图片描述

那么同理如果我更改了当前路径的工作目录,我就可以把文件建立到新的路径里。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.fwrite

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里不加1似乎并没有问题,接下来将写入的文件内容改一改。

在这里插入图片描述

在这里插入图片描述

插入一个额外的问题

似乎也没有问题。那么问题是原来的数据怎么不见了,只剩下了abcd了呢?

在这里插入图片描述

根据文档解释,fopen用w写入时每次都从开头写入,并且每次都会把文件进行清空处理。

回到原来的问题

在这里插入图片描述

在这里插入图片描述

后面出现了一个乱码,这是/0,因为/0不能被看到,所以被vim翻译成了乱码。那么究竟需不需要写/0呢?其实是不需要的,因为字符串以/0结尾是c语言的规定,跟文件没有关系。

3.fopen以a方式打开

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

a其实就是不断追加。

二.Linux下一切皆文件

在创建一个C程序时,它会默认打开三个文件:stdin,stdout,stderror。

在这里插入图片描述

当我们想要读取或者打印时,可以直接向这些文件流里写入即可。

例如:之前我们向log.txt文件里写入信息,也可以向stdout文件里写入信息。

在这里插入图片描述

在这里插入图片描述

当然更常用的fprintf

在这里插入图片描述

在这里插入图片描述

可以看出对于Linux来说无论是对log.txt文件里写入,还是向显示器写入都没有区别。

三.系统调用接口

众所周知文件是被存在磁盘里的,而用户想要操作硬件就必须经过操作系统,操作系统就必须提供对应的接口来供用户使用,那么可以得出c语言的标准文件例如printf之类也必定封装了系统调用接口,下面来介绍一些系统调用接口。

在这里插入图片描述

第一个参数要打开的文件名,第二个是打开的模式,第三个是创建文件时指定的文件权限。第一个接口一般用来打开已经存在的文件,第二个一般用来创建新文件。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这与C语言所封装后的不同,使用O_WRONLY并不会新建文件,一旦找不到文件就是打开失败了。

接下来使用第三个参数,想要创建一个权限为666的文件

在这里插入图片描述

注意,这里必须要把掩码置为0,不然权限会与掩码相结合得出最终的权限。

关闭文件

在这里插入图片描述

写入内容

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

接下来做一个与上文一样的实验

在这里插入图片描述

在这里插入图片描述

我们可以发现它原本的内容依旧是被保留了下来。如果我们想要和fopen的w模式一样,每次写时将内容清空该如何做呢?那我们应该再加一个擦参数O_TRUNC。

在这里插入图片描述

总结

在这里插入图片描述

在这里插入图片描述

四.文件描述符-fd

每打开一个文件,就必定有一个结构体去维护这个文件(struct file)。而一个进程可以打开多个文件,那么这多个文件的管理结构体就会组成一个struct files_struct结构体,这个结构体里有一个数组(struct file*fd_array[]),存放着打开文件的结构体的指针,而这个数组的下标就被称为fd,所以open的返回值就是数组的下标。而这个结构体的指针存放在PCB里,这样该进程就能通过PCB管理这些文件了。

在这里插入图片描述

** Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入0, 标准输出1, 标准错误2。0,1,2对应的物理设备一般是:键盘,显示器,显示器**

所以我们可以直接通过0,1进行输入输出

在这里插入图片描述

在这里插入图片描述

这里从键盘上读入字符,用printf显示出来。可以看到是可以成功的,这里我们并没有打开这个文件,却依旧能写入,说明这三个文件默认打开其实是操作系统的特性。

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

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

相关文章

在Node.js中,什么是中间件(middleware)?它们的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

企业中台如何进行测试(下篇)

《企业中台如何进行测试》包含了主数据治理测试、统一认证测试、业务集成测试、门户建设测试、数据分析测试等内容。由于篇幅较长,将分为上、下两个篇章与大家分享,在上篇主要从主数据治理和统一认证两个方面对企业中台的测试内容进行介绍,下…

Visual Studio Code 常用快捷键大全

Visual Studio Code 常用快捷键大全 快捷键是编码过程中经常使用,且能够极大提升效率的部分,这里给大家介绍一些VS Code中非常有用的快捷键。 打开和关闭侧边栏 Mac — Command B Windows — Ctrl B Ubuntu — Ctrl B 选择单词 Mac — Command D …

洗衣洗鞋柜洗衣洗鞋小程序

支持:一键投递、上门取衣、自主送店、多种支付方式 TEL: 17638103951(同V) -----------------用户下单-------------- -------------------------多种支付和投递方式------------------------- -----------------商家取鞋--------------

基于冠状病毒群体免疫算法的无人机航迹规划-附代码

基于冠状病毒群体免疫算法的无人机航迹规划 文章目录 基于冠状病毒群体免疫算法的无人机航迹规划1.冠状病毒群体免疫搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用冠状病毒群体…

从关键新闻和最新技术看AI行业发展(2023.10.9-10.22第八期) |【WeThinkIn老实人报】

Rocky Ding 公众号:WeThinkIn 写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习&…

测试总结模板

​​​​​​​ ​​​​​​​ ​​​​​​​ xx电力工作计划管理系统 系统测试总结 评审核准单 时间 作者 工作内容 版本 确认人 确认时间 2007/11/6 姜全尧 创建延边电力工作计划管理系统测试总结 1.0 …

二叉树OJ题(用前序和中序遍历构建二叉树,用中序和后续遍历构建二叉树)

文章目录 二叉树OJ题一、用前序和中序遍历构建二叉树1.思路2.代码 二、用中序和后续遍历构建二叉树1.思路2.代码 二叉树OJ题 一、用前序和中序遍历构建二叉树 1.思路 1.根据前序遍历找到根结点root 2.在中序遍历中(inBegin0和inEndelem.length-1范围之间&#xff09…

老外总结的14条Go接口最佳实践

最近几个月,没事喜欢看看老外写的技术文章,发现他们的一些思考维度真的有些不太一样。当然,他们写的文章大多数没有国内的那么卷。 今天这篇文章是关于Go语言中接口设计的一些最佳实践,与Java等语言不尽相似,但又带着…

Linux常用命令——chcon命令

在线Linux命令查询工具 chcon 修改对象(文件)的安全上下文 补充说明 chcon命令是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用--ref…

Ubuntu连不上WiFi 或者虽然能连上校园网,但是浏览器打不开登录页面

写在前面 自己的电脑环境: Ubuntu20.04 一、问题描述 自己的 Ubuntu 遇到连接不上 除校园网之外的其他WiFi, 或者 虽然能连上校园网,但是浏览器打不开登录页面的问题。 二、解决方法 出现这种问题的原因可能是 之前开过VPN, 导致系统的网络设置出现…

上海亚商投顾:创业板指高开低走 传媒、游戏板块逆势大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡调整,创业板指尾盘跌超1%。传媒、游戏板块逆势大涨,百纳千成、天龙集…

浮动模块布局

基本思路 若宽度和浏览器一样宽,则不需要设置width 一般父盒子使用标准流,然后标准流内使用浮动 一般父盒子需要居中显示,使用 margin: 0 auto; 注意浮动盒子之间的margin值 与 父盒子width、height值之间的相等关系,一定要计算…

APUS成为深圳市人工智能行业协会理事单位,CEO李涛受聘专家

近日,APUS正式成为深圳市人工智能行业协会理事单位,APUS董事长兼CEO李涛同时受聘为协会专家委员会专家。 深圳市人工智能行业协会成立于2017年,由电子通信、大数据、计算机视觉、自然语言处理等AI相关领域企事业单位组成,致力于加…

Goland 对容器中的 Go 程序断点远程调试

1,针对 golang 程序打断点有哪几种情况 临时进程:针对临时运行一次的 Golang 脚本,比如定时统计脚本,定时推送脚本。常驻进程:针对一直在后台运行的 Golang 程序,比如 HTTP 或者 GRPC 服务。 我们现在假设…

【多线程面试题二十一】、 分段锁是怎么实现的?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官: 分段锁是怎么实现的&am…

最新ChatGPT商业运营系统源码+支持GPT4/支持ai绘画+支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

[common c/c++] ring buffer/circular buffer 环形队列/环形缓冲区

前言: ring buffer / circular buffer 又名环形队列 / 环形缓冲区,其通过开辟固定尺寸的内存来实现反复复用同一块内存的目的。由于预先开辟了固定尺寸的内容,所以当数据满的时候,可以有两种处理方式,具体使用哪一种按…

DC系列 DC:3

DC系列 DC:3 文章目录 DC系列 DC:3调试靶机信息收集IP端口信息收集 框架漏洞利用joomscan扫描工具利用msf工具利用(无法使用)kali漏洞库利用sqlmap利用 文件上传提权 调试靶机 点击虚拟机设置选择CD/DVD点击高级将IDE调成画面中这个选项 信息收集 IP端口信息收集 对自己网…

【实战Flask API项目指南】之七 用JWT进行用户认证与授权

实战Flask API项目指南之 用JWT进行用户认证与授权 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发…