首页 > 其他分享 >学习笔记(2)

学习笔记(2)

时间:2023-09-17 20:34:55浏览次数:41  
标签:文件 char int 笔记 学习 FILE 库函数 size

一、任务详情

自学教材第九章,提交学习笔记(10分)
本章是复习C语言中的文件操作内容,结构化从文本文件操作,二进制文件操作两个大内容考虑,以前可能只关注文本文件的操作,我们以后更多的是操作二进制文件。
文本文件中考虑字符读写,行读写,任意位置读写等
文件操作都有什么?
二进制文件和文本文件如何转换?
数据结构如何读写?
...

二、知识点归纳

9.1 I/O库函数

系统调用是文件操作的基础,但它们只支持数据块的读/写。
 I/O库函数是一系列文件操作函数,支持按逻辑单元读/写文件。

9.2 I/O库函数与系统调用

几乎每个支持C语言编程的操作系统都可提供文件I/O库函数,在Unix/Linux中, I/O库函数建立在系统调用的基础上。
系统调用函数与I/O库函数具有高度相似性,每个I/O库函数的根都在对应的系统调用函数中。

系统调用函数:

  • open():打开文件
  • read():从文件读取数据
  • write():向文件写入数据
  • lseek():设置文件读/写指针的位置
  • close():关闭文件
    I/O库函数:
  • fopen():打开文件并返回一个文件指针
  • fread():从文件中读取二进制数据
  • fwrite():向文件中写入二进制数据
  • fseek():在文件中移动读/写指针的位置
  • fclose():关闭文件

9.3 I/O库函数的算法

  • fread算法
    C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stream 读取数据到 ptr 所指向的数组中。

  • fwrite算法
    C 库函数 size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 把 ptr 所指向的数组中的数据写入到给定流 stream 中。

  • fclose算法
    C 库函数 int fclose(FILE *stream) 关闭流 stream。刷新所有的缓冲区。

9.4 使用I/O库函数或系统调用

对于以BLKSIZE为单位的读/写数据来说,系统调用更高效。否则使用I/O库函数调用更高效。

9.5 I/O库模式

fopen()中的模式参数可以指定为:"r"、"w"、"a",分别代表读、写、追加。
每个模式字符串可以包含一个+号,表示同时读和写,或者在写入或追加时,如果文件不存在,则创建文件。
"r+"表示读/写,不会截断文件。
"w+"表示读/写,但会先截断文件;如果文件不存在,会创建文件。
"a+"表示通过追加进行读/写;如果文件不存在,会创建文件。

  • 字符模式I/O
    int fget(FILE *fp)
    int ungetc(int c,FILE *fp)
    int fputc(int c,FILE *fp)

  • 行模式I/O
    char *fgets(char *buf,int size,FILE *fp)
    int fputs(char *buf,FILE *fp)

  • 格式化I/O
    格式化输入
    scanf(char *FMT,&items)
    fscanf(fp,char *FMT,&items)
    格式化输出
    printf(char *FMT,&items)
    fprintf(fp,char *FMT,&items)

  • 内存中的转换函数
    sscanf(buf,FMT,&items);
    sprintf(buf,FMT,items);

  • 其他I/O库函数
    fseek()、ftell()、rewind()
    feof()、ferror()、fileno()
    freopen()
    setbuf()、setvbuf()
    popen()

  • 其他I/O库函数
    每对fread()和fwrite()之间至少有一个fseek()和ftell()

9.6 文件流缓冲

每个文件流都有一个FILE结构体,其中包含一个内部缓冲区。对文件读写需要遍历缓冲区。

  • 无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输。
  • 行缓冲:遇到换行符时,写入行缓冲流的字符以块大小传输到文件或从文件传输。
  • 全缓冲:写入全缓冲流或从中读取的字符以快大小传输到文件或从文件传输。

9.7 变参函数

在I/O库函数中, printf()相当独特,因为多种不同类型的可变数量参数可以调用它。
目前,C语言和C++会强制执行类型检查,但为了方便,这两种语言仍然允许参数数量可变的函数。这些函数必须至少使用一个参数进行声明,后跟3个点。

9.8 编程项目:类printf函数

9.9习题

三、苏格拉底挑战

  • 问题1

  • 问题2

二、问题与解决思路

问题

(1)文件流是什么
(2)为什么文件流需要内部缓冲?

解决思路

标签:文件,char,int,笔记,学习,FILE,库函数,size
From: https://www.cnblogs.com/Euyq123/p/17709724.html

相关文章

  • golang项目搭建笔记-cobra
    cobra介绍GitHub地址cobra中,一个命令主要概念为command,arguement,flag,可以理解为谓语、宾语、状语格式为APPNAMECOMMANDARG--FLAG,例如:gitcloneURL--bare项目搭建cobra提供了非常方便的工具cobra-cli,可以快速添加命令,参考官方文档新建项目#进入项目目录gomodin......
  • 第九章“学习笔记”
    ------------恢复内容开始------------I/O库函数一、库函数基本内容 系统调用函数:open()、read()、write()、lseek()、close(); I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()在系统调用中,文件描述符fd是一个整数,在库I/O中,fp是一个文件流指针。fopen()发出open()系统调用用......
  • 学习后的顺序表(结点内容只设学号、姓名),表内采用数组,数组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版本做准备,对......