首页 > 其他分享 >《信息安全系统设计与实现》第二周学习笔记

《信息安全系统设计与实现》第二周学习笔记

时间:2023-09-17 19:45:53浏览次数:34  
标签:fp 文件 fread int 信息安全 笔记 char 第二周 FILE

第九章 I/O库函数

I/O库函数与系统调用

  • 系统调用函数

    • open()

    • read()

    • write()

    • lseek()

    • close()

  • I/O库函数

    • fopen()

    • fread()

    • fwrite()

    • fseek()

    • fclose()

I/O库函数的算法

  • fread算法:

    • 第一次调用fread()时候,FILE结构体的缓冲区是空的,fread()使用保存的文件描述符fd发出一个n =read(fd, fbuffer, BLKSIZE);系统调用,用数据快填充内部的fbuf[]。

    • 在随后的每次fread()的调用中,它都尝试满足来自FILE结构体内部缓冲区的调用

  • fwrite算法:

    • fwrite算法与fread算法类似,只是数据传输方向不同
  • fclose算法:

    • 若以写的方式打开文件,fclose会先关闭文件流的局部缓冲区。然后,它会发出一个close(fd)系统调用来关闭FILE结构体中的文件描述符。最后,它会释放FILE结构体,并将FILE指针重置为NULL

使用I/O数据库或系统调用

在fread()和fwrite()的一些实现中,例如在GNU libc库中,如果请求的大小以BLKSIZE为单位,它们可以使用系统调用将以BLKSIZE为单位的数据直接从内核传输到用户指定的缓冲区。

I/O库模式

  • fopen()

    fopen()中的模式参数:

    • r:读

    • w: 写

    • a:追加

    • r+:读/写,不会截断文件

    • w+:读/写,会先截断文件;如果文件不存在,会创建文件

    • a+:通过追加进行读/写;如果文件不存在,会创建文件

  • 字符模式I/O
    int fgetc(FILE *fp); // get achar from fp, cast to int
    返回值:返回读取到的字符的整型表示,若已到达文件末尾或发生错误,则返回特定值 EOF(-1)

    int ungetc(int c, FILE *fp); // push a prviously char got by fgetc() back to stream
    返回值:成功推回字符则返回推回的字符 c 的整型表示,推回失败则返回特定值 EOF(-1)。

    int fputc(int c, FILE *fp); // put a char to fp
    返回值:成功写入字符则返回写入的字符 c 的整型表示,写入失败则返回特定值 EOF(-1)。

实践:将文本文件中的字母由小写转换成大写

原文件(input.txt)中的内容

main.c中的内容
代码如下:

操作过程

转换后,输出文件(output.txt)中的内容

  • 行模式I/O
    char *fgets(char *buf, int size, FILE *fp):从fp中读取最多的为一行(以\n结尾)的字符
    int fputs(char *buf,FILE *fp):将buf的一行写入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);
    

    在这里,sscanf()和sprintf()并非I/O函数,而是内存中的数据转换函数。

  • 其他I/O库函数

    • fseek()、ftell()、rewind():更该文件流中的读/写字节位置

    • feof()、ferr()、fileno():测试文件流状态

    • fdopen():用文件描述符打开文件流

    • freopen():以新名称重新打开现有的流

    • setbuf()、setvbuf():设置缓冲方案

    • popen():创建管道,复刻子进程来调用sh

  • 限制混合fread-fwrite

    • 当某文件同时进行读、写操作时,会限制混合使用fread()和fwrite(),注意两者之间至少有一个fseek()或者ftell()
  • 文件流缓冲

    • 无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输

    • 行缓冲:遇到换行符时,写入行缓冲流的字符以块的形式传输

    • 全缓冲:写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。

    • 通过fopen()创建文件流之后,在执行任何操作之前,用户均可发出一个 setvbuf(FILE *stream,char *buf , int node,int size)调用来设置缓冲区(buf)、缓冲区大小(size)和缓冲区方案(mode),它们必须是一下以下一个宏:

      • _IONBUF:无缓冲

      • _IOLBUF:行缓冲

      • _IOFBUF:全缓冲

  • 变参函数

    • 在I/O库函数中,printf()相当独特,多种不同类型的可变数量参数都可以调用它

苏格拉底挑战

  • 关于I/O库函数与系统调用的苏格拉底挑战

  • 关于fread算法的苏格拉底挑战

遇到的问题

问题:关于字符模式I/O,字符编码和字符模式I/O之间有何联系?

解决方法:使用GPT进行了解

标签:fp,文件,fread,int,信息安全,笔记,char,第二周,FILE
From: https://www.cnblogs.com/wjdnmx/p/17709319.html

相关文章

  • 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":......
  • 《Java编程思想第四版》学习笔记28--关于StreamTokenizer
    //:SortedWordCount.java//Countswordsinafile,outputs//resultsinsortedform.importjava.io.*;importjava.util.*;importc08.*;//ContainsStrSortVectorclassCounter{privateinti=1;intread(){returni;}voidincrement(){i++;}}pu......
  • 信息安全系统设计与实现学习笔记2
    学习笔记2知识点总结文件操作文件操作涵盖了对文件的添加、删除、修改、打开、关闭等基本操作。二进制文件和文本文件的转换二进制转文本文件需要构建二进制转十六进制函数,按照每八位一组,每四位一单元进行转换。反过来,文本文件转二进制文件需要构建十六进制转二进制函......
  • 20211312徐元琦学习笔记2
    第9章I/O库函数——教材知识点归纳9.1~9.2系统调用和I/O库函数系统调用:操作系统中,进程以两种不同的方式运行:内核模式(Kmode)和用户模式(Umode)。Umode权限有限,特殊权限的操作需要在Kmode下进行。系统调用(SystemCall)机制允许进程进入Kmode,执行更高权限的操作。系统调用和I/O......
  • CentOS8部署NextCloud+onlyoffice笔记
    通过宝塔一键部署一、安装宝塔yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/install/install_6.0.sh&&shinstall.sh二、从宝塔Docker快速部署安装NextCloud。一键部署,按照向导逐步安装三、安装onlyoffice应用1、安装onlyoffice文档服务器......
  • 《信息安全系统设计与实现》第二周学习笔记
    教材知识点总结第九章I/O库函数I/O库函数与系统调用系统调用函数open()read()write()lseek()close()I/O库函数fopen()fread()fwrite()fseek()fclose()可见每个库函数的根都在对应系统调用函数中I/O库函数的算法fread算法第一次调用fread()时,FILE结构......