Linux基础IO

本篇博客来讲述Linux中的新一模块--文件IO,我们来做简单的介绍和陈述。

在笔者之前的文章之中,已经对C语言中的文件操作做了简要介绍,我们旧事重提,再次进行一个简要的回顾。

目录

1.文件的操作

1.1打开文件

1.2向文件写入数据

1.3从文件读取数据

1.4关闭文件

1.5跳转文件读写位置

1.6总结

1.文件的操作

1.1打开文件

文件操作中,首先我们我们需要打开文件,返回文件的操作句柄,凭借着操作句柄来对文件进行相关操作。(有文件对应的句柄才可以对文件进行相应的操作)

FILE *fopen(char *pathname, const char *mode);

其中,pathname即是需要打开的文件名;mode是打开方式,不同的打开方式即代表对文件不同的操作权限。

对于打开文件方式的选项,在之前的博客中已经有详细介绍,不过为了方便读者,在此笔者再重新介绍一次:

  1. r:以只读方式打开文件;(若文件不存在会出错)

  2. w:以只写的方式打开文件;(若文件不存在会自动创建新文件,若文件已经存在则会清空文件原有内容)

  3. a:以追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是会将新的数据追加到文件末尾)

  4. r+:以可读可写的方式打开文件;(若文件不存在就可以出错,若文件已经存在会从文件起始位置进行操作,会覆盖文件原有内容)

  5. w+:以可读可写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则会清空文件原有内容)

  6. a+:以可读和追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是将新的数据追加文件末尾)

  7. b:以二进制形式打开文件,默认是以文本的形式打开。(在文本模式下,\n操作会被解释为\r\n,代表换行和光标移动)

值得注意的是打开方式--b,它是可以同其他打开方式组合,产生叠加的打开效果组合。

1.2向文件写入数据

打开文件后,必然伴随着对文件的一些操作,可能是读取、修改、删除和添加(增删改查)文件内容,我们先来讲述向文件中写入数据的操作。

size_t fwrite(char *data, int bsize, int nmem, FILE *fp);

其中,data是写入数据的地址,bsize是一块数据的大小,nmem是块的个数,也就是说 bsize * nmen才是真正的数据大小,fp则是目标文件的操作句柄。

1.3从文件读取数据

size_t fread(char *buf, int bsize, int nmem, FILE *fp);

fread函数用于向指定文件读取数据到指定的空间buf之中,读取数据的大小计算方式同fwrite函数。

1.4关闭文件

int fclose(FILE *fp);

关闭操作文件,释放对应资源。成功返回0。

1.5跳转文件读写位置

int fseek(FILE *fp, int offset, int whence);

其中whence是跳转位置,offset是偏移量。对于whence的跳转位置,我们有三个关键字来对其进行形容:

  • SEEK_SET -- 文件的起始位置;
  • SEEK_CUR -- 当前的读写位置;
  • SEEK_END -- 文件的末尾位置。

1.6总结

还是老方法,我们对上述接口进行一个简单的使用,来对知识点作以巩固。

设计一个简单程序内容,对上述函数加以使用,具体的函数使用说明和使用细节,在上述代码中的注释中笔者做了概述。

然后我们来观察上述代码的具体运行结果。

 

在删除原有的test.txt文件后,我们对test进行了执行,发现程序打印出了数据data的内容,打开目录发现text.txt成功创建,而且data内容也完整的写入到了文件test.txt之中。

这些功能的实现,正如我们程序中的设计。即创建文件,向文件写入数据,读取文件内容。

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

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

相关文章

Java多态

目录 1.多态是什么? 2.多态的条件 3.重写 3.1重写的概念 3.2重写的作用 3.3重写的规则 4.向上转型与向下转型 4.1向上转型 4.2向下转型 5.多态的优缺点 5.1 优点 5.2 缺点 面向对象程序三大特性:封装、继承、多态。 1.多态是什么&#xff1…

七结(4.2)遍历集合与javaFX界面

今天由学长学界们进行了一次授课,算是温习了一遍面向对象的知识,同时配置了关于javaFX的环境,以及一些关于项目的知识。 java学习总结: Collection的遍历: 迭代器遍历(Iterator):…

leetcode 87. Scramble String(扰乱字符串)

scramble(字符串s) 算法: s长度为1时结束。 s可以拆分成2部分x和y,sxy, 这两部分可以交换,也可以不交换,即 s xy 或 s yx. 上面scramble还会递归作用于x 和 y. 给出相同长度的字符串s1, s2, 问s2是否可通过scramble(s1)获得。 …

WTW-16P 应用电路

1、WTW-16P 按键控制 PWM 输出应用电路 软件设置: 按键控制模式。 I/O 口定义: 选取 I/O 口 P00、P01、P02、P03 作为触发口,在编辑 WT588D 语音工程时,把触发口的按键定义为可触发播放的触发方式,就可进行工作。 BUS…

如何提高网站安全防护?

网站的安全问题一直是很多运维人员的心头大患,一个网站的安全性如果出现问题,那么后续的一系列潜在危害都会起到连锁反应。就好像网站被挂马,容易遭受恶意请求呀,数据泄露等等都会成为杀死网站的凶手。 1、让服务器有一个安全稳定…

百度双塔召回引擎MOBIUS

1. 概述 对于一个搜索或者推荐系统来说,分阶段的设计都是当下的一个标配,主要是为了平衡效率和效果,在百度的广告系统中,也是分成了如下的三层结构: 最上层的Matching阶段负责从全库中找到与query相关的候选集&#x…

KD2511N系列微电阻测试仪

一、产品概述 KD2511N系列微电阻测试仪是一款对变压器、电机、开关、继电器、接插件等各类直流电阻进行测试的仪器。其基本测试精度最高可达 0.05%,并具有较高的测量速度。 KD2511N微电阻测试仪使用了高精度恒流流经被测件以及四端测量,有效的消除了 引线…

Kafka 如何保证消息的消费顺序

文章目录先直接给出答案吧。在集群或者多partition下无法保障完全顺序消费,但是可以保障分区顺序消费。具体下面讲解。我们在使用消息队列的过程中经常有业务场景需要严格保证消息的消费顺序,比如我们同时发了 2 个消息,这 2 个消息对应的操作…

蓝桥杯——根据手册写底层

一、 DS18B20温度传感器 1.官方所给源码 /* # DS1302代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码…

ssm入门

文章目录1.介绍ssm2.Spring篇基础内容🪅什么是IOC(控制反转)Spring和IOC之间的关系IOC容器的作用以及内部存放IoC入门案例📬DI(Dependency Injection)依赖注入依赖注入的概念IOC容器中哪些bean之间要建立依…

函数微分和导数的定义

1.我们先来看可导的定义: 相信这个大家都看的懂。 2.接下来我们看可微的定义: 你们有没用想过为什么会有可微,他是用来干什么的,我们接下来看下面这张图,特别是结合图2-11来说, 我们可以看到书上说可微是在…

【day2】Android Jetpack Compose环境搭建

【day2】Android Jetpack Compose环境搭建 以下是适用于 Jetpack Compose 的环境要求: Android Studio 版本:4.2 Canary 15 或更高版本Gradle 版本:7.0.0-beta02 或更高版本Android 插件版本:4.2.0-beta15 或更高版本Kotlin 版本…

MySQL 幻读问题

承接上文MySQL多版本并发控制MVCC实现原理 幻读现象 因为在RR(可重复读)隔离级别里,事务1的第二次查询没有生成新的readview,而是用的第一次查询时生成的readview,所以第二次查询返回2条数据,而不是3条数据…

看过来,这里有JavaScript技术干货?

今天是一篇正经的技术分享,针对JavaScript技能的十来个专业小技巧,如果你想提升一下JS方面的能力成为一个更好的前端开发人员,那么就可以接着看下去哦。 1、使用逻辑运算符进行短路评估 您可以使用逻辑运算符进行短路评估,方法是…

云边协同与人工智能AI的深度融合(云端训练、边端推理)

在面向物联网、大流量等场景下,为了满足更广连接、更低时延、更好控制等需求,云计算在向一种更加全局化的分布式节点组合形态进阶,边缘计算是其向边缘侧分布式拓展的新触角。 以物联网场景举例,设备产生大量数据,上传到…

都2023了,学习自动化测试还有必要么?会不会浪费我时间

最近收到不少小伙伴私信提问,其中问得比较多的就是“学习自动化测试有那么重要吗?”。 我的回答是肯定的——很重要。 相信不少同学都有诸如此类的疑问,例如:“日常工作中好像用不上自动化?”、“手工点点点好像也可…

【从零开始学习 UVM】9.1、UVM Config DB —— UVM Resource database 资源库详解

文章目录 resource 是一个参数化的容器,可以保存任意数据。资源可用于配置组件、为序列提供数据或在TestBench不同部分之间启用信息共享。它们使用作用域信息(scope)存储,因此其可见性可以限制在TestBench的某些部分中。您可以将任何数据类型放入资源数据库中,并使另一个组…

若依后端管理系统学习日志

文章目录遇到的问题1. 自定义模块404解决方案1. 自定义后台异常返回2. 添加导入按钮3. 树形列表搜索遇到的问题 1. 自定义模块404 idea没有报错,但是点击进去页面显示404。 F12查看错误信息,原来是访问后端controller接口没有成功,找不到导…

上传文件—ajax

目录 一、上传图片文件 1.写基本html 完成页面主框架 2.script部分 2-0 主框架 上传文件按钮被点击触发事件 2-1验证使得否选择文件 2-2 介绍 FormData 2-3 监听onreadystatechange事件 小结 二、实现上传文件进度条 1. 在bootstrap找进度条组件 2.script 完成进度条算法…

Java锁深入理解2——ReentrantLock

前言 本篇博客是《Java锁深入理解》系列博客的第二篇,建议依次阅读。 各篇博客链接如下: Java锁深入理解1——概述及总结 Java锁深入理解2——ReentrantLock Java锁深入理解3——synchronized Java锁深入理解4——ReentrantLock VS synchronized Java锁…