首页 > 其他分享 >第九章“学习笔记”

第九章“学习笔记”

时间:2023-09-17 20:22:43浏览次数:31  
标签:文件 调用 第九章 fread 笔记 学习 read 09 缓冲区

------------恢复内容开始------------

I/O库函数

一、库函数基本内容

  •   系统调用函数:open()、read()、write()、lseek()、close(); 
  • I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()
  1. 在系统调用中,文件描述符fd是一个整数,在库I/O中,fp是一个文件流指针。
  2. fopen()发出open()系统调用用以获取文件描述符fd,在失败时返回一个null指针。

二、I/O库函数的算法

  • fread算法。
  1. 在第一次调用ferad()时候,file结构体缓冲区是空的,fread()使用保存的文件描述符fd发出一个n=read(fd,fbuffer,BLKSIZE);系统调用,用数据块填充内部的fbuff[]。然后,它会初始化 fbuf[]的指针、计数器和状态变量,以表明内部缓冲区中有一个数据块。接着,通过将数据复制到程序的缓冲区,尝试满足来自内部缓冲区的fread()调用。如果内部缓冲区没有足够的数据,则会再发出一个read()系统调用来填充内部缓冲区,将数据从内部缓冲区传输到程序缓冲区,直到满足所需 的字节数(或者文件无更多数据)。将数据复制到程序的缓冲区之后,它会更新内部缓冲区的指针、计数器等,为下一个fread()请求做好准备。然后,它会返回实际读取的数据对象数量。
  2. 在随后的每次fread()调用中,它都尝试满足来自FILE 结构体内部缓冲区的调用。 当缓冲区变为空时,它就会发出 read()系统调用来重新填充内部缓冲区。因此,fread()一方  面接受来自用户程序的调用,另一方面向操作系统内核发出 read()系统调用。除了read()系  统调用之外,所有fread()处理都在用户模式映像中执行。它只在需要时才会进入操作系统  内核,并且以一种最高效匹配文件的方式进入。它会提供自动缓冲机制,因此用户程序不必  担心这些其体操作。

  • fwrite算法。
  1. fwrite()算法与fread()算法相似,只是数据传输方向不同。最开始, FILE 结构体的内 部缓冲区是空的。在每次调用fwrite()时,它将数据写人内部缓冲区,并调整缓冲区的指 针、计数器和状态变量,以跟踪缓冲区中的字节数。如果缓冲区已满,则发出 write()系统调用,将整个缓冲区写入操作系统内核。
  • fclose算法
  1. 若文件以写的方式被打开, fclose()会先关闭文件流的局部缓冲区。然后,它会发出一  个close(fd)系统调用来关闭FILE结构体中的文件描述符。最后,它会释放FILE结构体, 并将FILE指针重置为NULL。

三、I/O库模式

  1. 字符模式I/O
  2. 行模式I/O
  3. 格式化I/O

四、文件流缓冲

  • 无缓冲
  • 行缓冲
  • 全缓冲2023-09-172023-09-172023-09-172023-09-172023-09-17

 

------------恢复内容结束------------

标签:文件,调用,第九章,fread,笔记,学习,read,09,缓冲区
From: https://www.cnblogs.com/adbl/p/17709713.html

相关文章

  • 学习后的顺序表(结点内容只设学号、姓名),表内采用数组,数组0位存放数据,相关的函数均按此
    #include<iostream>#include<string.h>usingnamespacestd;typedefstruct{ intid; stringname;}Node;//结点定义typedefstruct{ Node*element;//基地址(动态长度) intlength;//表长}Linklist;#defineMAXSIZE100//最大长度voidmenu();//声明菜单函数voidCreatelist(Lin......
  • 《信息安全系统设计与实现》第二周学习笔记
    第九章I/O库函数I/O库函数与系统调用系统调用函数open()read()write()lseek()close()I/O库函数fopen()fread()fwrite()fseek()fclose()I/O库函数的算法fread算法:第一次调用fread()时候,FILE结构体的缓冲区是空的,fread()使用保......
  • MySQL笔记目录
    MySQL目录本视频学习自尚硅谷的MySQL教程,原地址在这笔记源自官方提供笔记,根据自己的理解重新排版修改、并增添了一些内容初级篇第一章MySQL概述第二章MySQL环境搭建(mysql环境安装、配置、卸载、登录)第三章SQL介绍DDL数据库和表的操作第四章MySQL数据类型......
  • 信息安全系统设计与实现——学习笔记2
    任务详情:自学教材第九章,提交学习笔记Part1知识点归纳&GPT提问知识点归纳系统调用函数和I/O库函数系统调用函数是直接与操作系统交互的函数,用于进行底层的文件操作。I/O库函数则是建立在系统调用函数之上的高级函数,提供更方便和易于使用的接口来进行文件的读写操作。这些函......
  • 2020-12-17-mc模组开发笔记
    idea乱码在help里进VM参数设置https://www.huaweicloud.com/articles/9096546b90dc8c52d52138d01875b8ed.html->与Lambda表达式tileEntityType->https://www.runoob.com/java/java8-lambda-expressions.html简单说就是return后面一坨给前面,后面一坨可以是函数表达式方块......
  • 学习笔记2
    I/O库函数一、知识点总结1.I/O库函数与系统调用每个I/O库函数的根都在对应的系统调用函数中。2.I/O库函数的算法fread算法(1)第一次调用:FILE结构体的缓冲区是空的。(2)随后的每次调用:尝试满足来自FILE结构体内部缓冲区的调用。fwrite算法与fread()算法相似,只是数据传输方......
  • 学习笔记2(第九章)
    一、知识点归纳1、C语言中常用的文件操作函数文件打开和关闭fopen:FILE*fopen(constchar*filename,constchar*mode);打开一个文件,如果成功,返回一个FILE*指针,否则返回NULL.mode可以是:"r":只读打开"w":写入打开(如果文件存在则清空内容,如果不存在则创建)"a":......
  • (数据科学学习手札154)geopandas 0.14版本新特性一览
    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1简介大家好我是费老师,就在前两天,Python生态中的GIS运算神器geopandas发布了其0.14.0新版本,在这次新版本更新中,不仅是新增了许多矢量计算API,还开始为日后正式发布1.0版本做准备,对......
  • 《Java编程思想第四版》学习笔记28--关于StreamTokenizer
    //:SortedWordCount.java//Countswordsinafile,outputs//resultsinsortedform.importjava.io.*;importjava.util.*;importc08.*;//ContainsStrSortVectorclassCounter{privateinti=1;intread(){returni;}voidincrement(){i++;}}pu......
  • 信息安全系统设计与实现学习笔记2
    学习笔记2知识点总结文件操作文件操作涵盖了对文件的添加、删除、修改、打开、关闭等基本操作。二进制文件和文本文件的转换二进制转文本文件需要构建二进制转十六进制函数,按照每八位一组,每四位一单元进行转换。反过来,文本文件转二进制文件需要构建十六进制转二进制函......