首页 > 其他分享 >20211326德永学习笔记2

20211326德永学习笔记2

时间:2023-09-15 12:22:05浏览次数:34  
标签:文件 调用 fread 笔记 FILE 缓冲区 20211326 德永 size

第九章总结要点

1.I/O库函数与系统调用

系统调用函数:open()、read()、write()、lseek()、close();
I/O库函数:fopen()、fread()、fwrite()、flseek()、fclose()。

I/O库函数一一对应地依赖于系统调用函数。
2、I/O库函数的算法
-2.1 fread算法
在第一次调用fread()时,FILE结构体的缓冲区是空的,fread()使用保存的文件描述符fd发出一个系统调用,用数据块填充内部的fbuf[]。然后,它会初始化fbu[]的指针、计数器和状态变量,以表明内部缓冲区中有一个数据块。接着,通过将数据复制到程序的缓冲区,尝试满足来自内部缓冲区的fread()调用。如果内部缓冲区没有足够的数据,则会再发出一个read()系统调用来填充内部缓冲区,将数据从内部缓冲区传输到程序缓冲区,直到满足所需的字节数(或者文件无更多数据)。将数据复制到程序的缓冲区之后,它会更新内部缓冲区的指针、计数器等,为下一个 fread()请求做好准备。然后,它会返回实际读取的数据对象数量。
-2.2 fwrite算法
fwrite()算法与fread()算法相似,但数据传输方向不同。每次调动fwrite()时,它将数据写入缓冲区,并调整缓冲区的指针、计数器和状态变量,以跟踪缓冲区中的字节数。如果缓冲区已满,则发出write()系统调用,将整个缓冲区写入操作系统内核。
-2.3 fclose()算法
fwrite()在每次被调用的时候,它将数据写入内部缓冲区,并调整缓冲区的指针、计数器和状态变量,以跟踪缓冲区的字节数。如果缓冲区已满,则发出write()系统调用,将整个缓冲区写入操作系统内核。()fclose函数可以关闭文件流的局部缓冲区,然后,它会发出一个close(fd)系统调用来关闭 FILE 结构体中的文件描述。最后释放 FILE 结构体,并将 FILE 指针重置为NULL。
3.文件缓流冲
1.无缓冲
2.行缓冲
3.全缓冲 通过fopen()创建文件流之后,在对其执行任何操作之前,用户均可发出一个 setvbuf(FILE *stream, char *buf, int node, int size) 调用来设置缓冲区(buf)、缓冲区大小(size)和缓冲方案(mode),它们必须是以下一个宏:
IONBUF:无缓冲
OLBUF:行缓冲
IOFBUF:全缓冲 此外,还有其他的setbuf()函数,是setvbuf()的变体。对于行缓冲流或全缓冲流,可用fflush(stream)立即清除流的缓冲区。
3.C语言库函数访问文件
—3.1文件的创建与打开:FILE *fopen(const char *filename,const char *mode)
filename:文件名
mode:打开模式
—3.2常见的打开方式:r,rb 只读
w,wb 只写,如果文件不存在就创建
a,ab 追加,如果文件不存在就创建
r+,r+b,rb+ 读写方式打开
w+,w+b,wh+ 读写方式打开,文件不存在则创建
a+,a+b,ab+ 读和追加方式打开,文件不存在则创建
—3.3读文件:(b表示二进制文件)
size_t fread(void *ptr,size_t size,size_t n,FILE *stream)
stream:源文件
n:读取字段数
size: 每个字段的字节数
ptr:目标字符数组
返回实际读取的字节数
—3.4写文件:size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)
ptr:源数组
n:字段数
size:字段的字节数
stream:目标文件
返回实际写入字段数


问题与解决思路:
1.文本文件和二进制文件

所谓的文本文件,就是按照字符的编码规则(比如ASCII),1:1的根据你敲的字符形成的机器码文件。后缀习惯是以.txt结尾。一个典型的文本编辑器就是大家熟悉的记事本程序(notepad.exe)。
二进制文件是可以认为是所有非文本文件都称之为二进制文件。
要打开二进制文件,需要有形成这类文件的程序的内置的解析器,才能解读。这也解释了为什么不同的文件比如pdf,docx等文件,在编程的时候,必须要有相应的文档解析类函数来完成的原因了。
当然你完全可以用二进制方式打开任何一个文本文件,因为底层上就是那些代码,你只需要读取每一个字节,查找转化成相应字符予以显示就可以了,因为是你知道ASCII表的规则。

标签:文件,调用,fread,笔记,FILE,缓冲区,20211326,德永,size
From: https://www.cnblogs.com/deyong/p/17698507.html

相关文章

  • Python学习笔记-Python异常、模块与包
    了解异常什么是异常当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是我们常说的BUG。bug单词的诞生早期计算机采用大量继电器工作,马克二型计算机就是这样的。1945年9月9日,下午三点,马克二型计算机无法正常工作了,技术人员试......
  • 「学习笔记」莫比乌斯反演
    开新坑了。QWQ前置芝士:数论分块。(之后再说。QWQ)积性函数定义一个数论函数\(f(n)\)满足\(f(xy)=f(x)\timesf(y)\)(\(\gcd(x,y)=1\)),则称\(f(n)\)是积性函数。莫比乌斯函数:\(\mu(n)=\begin{cases}1&n=1\\0&n\\text{含有平方因子}\\(-1)^k&k\text{为}\n\\text{的......
  • 学习笔记二
    一、笔记(一)I/O库函数I/O库函数是在C和C++编程中广泛使用的文件操作函数,用于进行输入和输出操作。它们是构建在系统调用之上的高级接口,提供了更方便和高效的文件操作方法。(二)I/O库函数与系统调用I/O库函数与系统调用密切相关,它们封装了底层的系统调用,提供了更高级别、更易用的......
  • Python学习笔记-Python文件操作
    文件的编码简介计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?使用编码技术(密码本)将内容翻译成0和1存入。编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。计算机中有许多可用编码:UTF-8GBKBig5等不同的编码,将......
  • openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据
    openGauss学习笔记-69openGauss数据库管理-创建和管理普通表-更新表中数据修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新某个字段,而其他字段则不受影响。使用UPDATE命令更新现有行,需要提供以下三种信息:表的名称......
  • MFAN论文阅读笔记(待复现)
    论文标题:MFAN:Multi-modalFeature-enhancedAttentionNetworksforRumorDetection论文作者:JiaqiZheng,XiZhang,SanchuanGuo,QuanWang,WenyuZang,YongdongZhang论文来源:IJCAI2022代码来源:Code介绍一系列基于深度神经网络融合文本和视觉特征以产生多模态后表......
  • 文献笔记
    文献笔记基础对待复杂问题可以先考虑极限情形,从特殊到一般(一维,对角,边界);对同一问题可切换视角从不同角度进行考虑加深理解(如数学、统计、信息论等);注意通过添项、配方等方式整体换元简化问题(如利用正交性连乘转连加);函数零点分布判断:驻点(极值点或鞍点)\(f^\prime(x)=0\)各驻......
  • Windows11性能调教笔记
    windows11性能调教笔记windows11性能调节有很多种方式,首先我们可以提升我们的硬件能力水平,但考虑到大多数人不想去提升自己的硬件配置,所以根据笔者研究windows11是可以通过一定的方法去提升性能的。方法分为软件调节和硬件调节。硬件调节电源性能调节利用windows11隐藏的......
  • springcloud学习笔记
    一、 Hystrix-DashBoard监控平台   豪猪1. DashBoard监控平台的搭建  ① 基于父工程创建一个Module  ② pom.xml中添加依赖③ yml文件中设定dashboard启动端口号④ 创建启动类开启监控服务⑤启动服务,访问监控平台2. 被监控的Hystrix微服务配置  如果你想要把当前H......
  • SocialLGN阅读笔记
    SocialLGN阅读笔记​ 这篇文章主要是在LightGCN的基础上,不仅仅只采用了user-itemgraph来进行推荐,还加入了用户之间的社交信息。用户和项目的表示在LightGCN中传播,并且用户的表示在社交图中传播。在此基础上,本文还新设计了一个图融合操作,来聚合用户表示。​ 在推荐系统中,用户-项......