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

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

时间:2023-09-17 17:22:21浏览次数:39  
标签: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);
    • 在随后的每次fread()调用中,它都尝试满足来自FILE结构体内部缓冲区的调用。当缓冲区为空时,它就会发出read()系统调用来重新填充内部缓冲区。
  • fwrite()算法
    • fwrite()算法与fread()算法相似,只是数据传输方向不同。
    • 每次调用fwrite()时,它将数据写入内部缓冲区,并调整缓冲区的指针、计数器和状态变量。
    • 若缓冲区已满,则发出write()系统调用。
  • fclose()算法
    • 若文件以写的方式打开,fclose()会先关闭文件流的局部缓冲区。
    • 然后它会发出一个close(fd)系统调用来关闭FILE结构体中的文件描述符。
    • 最后它会释放FILE结构体,并将FILE指针重置为NULL。

I/O库模式

  • fopen()中的模式参数
    • r:读
    • w:写
    • a:追加
    • r+:读/写,不会截断文件
    • w+:读/写,会先截断文件;如果文件不存在,会创建文件。
    • a+:通过追加进行读/写;如果文件不存在,会创建文件。
  • 字符模式I/O
int fgetc(FILE *fp); // get a char from fp, cast to int.
int ungetc(int c, FILE *fp); // push a previously char got by fgetc() back to stream 
int fputc(int c, FILE *fp); // put a char to fp
编写一个c语言程序,将文本中的小写字母转换为大写字母
  • 原文本内容
  • c语言代码
#include <stdio.h>
int main() {
    FILE *file;
    char filename[] = "week2.txt";
    char ch;
    file = fopen(filename, "r+");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }
    while ((ch = fgetc(file)) != EOF) {
        if (ch >= 'a' && ch <= 'z') {
            ch = ch - 32; 
            fseek(file, -1, SEEK_CUR);
            fputc(ch, file);
        } 
    }
    fclose(file);
    return 0;
}
  • 编译运行
  • 运行结果
  • 行模式I/O
    char *fgets(char *buf, int size,FILE *fp):从fp中读取最多为一行(以\n结尾)的字符。
    int fputs(char *buf,FILE *fp):将buf中的一行写入fp中。
  • 格式化I/O
    • 格式化输入:(FMT=格式字符串)
scanf(char *FMT, &items);  //from stdin
fscanf(fp, char *FMT, &items);  //from file stream
  • 格式化输出:
printf(char *FMT, items);  //to stdout
fprintf(fp, char *FMT, items);  //to file stream
  • 内存中的转换函数
scanff(buf, FMT, &items);  //input from buf[ ] in memory
sprintf(buf, FMT, items); //print to buf[ ] in memory
  • 其他I/O库函数
    • fseek()、ftell()、rewind(): 更改文件流中的读/写字节位置。
    • feof()、ferr()、fileno():测试文件流状态。
    • fdopen():用文件描述符打开文件流。
    • freopen():以新名称重新打开现有的流。
    • setbuf()、setvbuf():设置缓冲方案。
    • popen():创建管道,复刻子进程来调用sh。
  • 限制混合fread-fwrite
    • 当文件流同时用于读/写时,就会限制使用混合fread()和fwrite()调用。
    • 规范要求每对fread()和fwrite()之间至少有一个fseek()或ftell()。

文件流缓冲

  • 无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输。
  • 行缓冲:遇到换行符时,写入行缓冲流的字符以块的形式传输。
  • 全缓冲:写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。
  • 通过fopen()创建文件流之后在对其执行任何操作之前,用户均可发出一个
    setvbuf(FILE *stream, char *buf, int node, int size)

变参函数

  • 在I/O库函数中,printf()相当独特,因为多种不同类型的可变数量参数都可以调用它
  • C语言与C++仍然允许参数数量可变的函数。这些函数必须至少使用一个参数进行声明,后跟3个点。

苏格拉底测试

I/O库模式






文件流缓冲



问题与解决

内存中的转换函数是什么,有什么用,看完教材后不是很理解。

解答:

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

相关文章

  • 学习笔记2 代码
    静态库测试代码gccsrc/hello.c-c-Iinclude-obin/hello.ocdbinarrcsvlibhello.ahello.ocd..mvbin/libhello.alibgccsrc/main.c-Iinclude-Llib-lhello-obin/hello动态库测试代码gcc-fPIC-sharedsrc/hello.c-Iinclude-olib/libhello.soexportLD_L......
  • 《信息安全系统设计与实现》第二周学习笔记
    I/O库函数方便用户使用,提高文件操作整体效率的一系列文件操作函数。I/O库函数与系统调用系统调用函数open()read()write()lseek()close()I/O库函数fopen()fread()fwrite()fseek()fclose()I/O库函数的算法fread在第一次调用fread()时,FILE结构体的缓冲区是空的,fread()使用保存的文件......
  • Unix/Linux系统编程学习笔记第九章
    《信息安全系统设计与实现》第二周学习笔记第九章I/O库函数I/O库函数与系统调用每个I/O库函数的根都在对应的系统调用函数中系统调用函数open()read()write()lseek()close()I/O库函数fopen()fread()fwrite()fseek()fclose()I/O库函数的算法fread算法:(1)第一......
  • Qemu源码分析(5)—Apple的学习笔记
    一,前言前言本节主要看线程什么时候创建的及创建的线程有什么作用。二,源码分析第一次进入断点仅主线程4215.root@ubuntu:/home/applecai#ps-T-p4215PIDSPIDTTYTIMECMD42154215pts/800:00:00qemu-system-gnu通过搜索文件名pthread关键字,然后找到qemu-thread-posix.c......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第二周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第二周学习笔记 一、任务要求自学教材第九章,提交学习笔记(10分)本章是复习C语言中的文件操作内容,结构化从文本文件操作,二进制文件操作两个大内容考虑,以前可能只关注文本文件的操作,我们以后更多的是操作二进制文件。文本文......
  • 2023-2024-1 20211327 信息安全系统设计与实现 学习笔记2(必做)
    学习笔记2C语言文件操作内容知识点总结运用ChatGPT进行苏格拉底挑战,发现问题与解决思路实践过程截图C语言文件操作内容知识点总结C语言文件基础操作字符读写、行读写、任意位置读写数据结构读写结构化从文本文件操作二进制文件与文本文件转换C语言文件基础操作1.......
  • C++ Primer 学习笔记——第十章
    第10章前言在前面我们学习容器的时候,是否发现标准库下的对容器的操作并不是太多(或许,初学时已经觉得好多了......
  • Linux教材第九章学习笔记——I/O库函数
    C语言文件操作内容复习 cd..  返回上级目标文件: ./  执行文件:对文件内容进行修改,在vim命令行输入wq保存后返回: gcc编译后输入./a.out可显示出c文件运行结果: 编译预处理: 编译: 汇编: 用字符方式逐个打印hello.c;打印十六进制文件: I/O库函数知识......
  • PWN做题笔记1
    原题在某个名字被51cto屏蔽了的CTF刷题网站,题目为ret2text题目属于栈溢出给出了地址和端口,压缩包中有一个二进制程序pwnfile命令可以看到是64位ELF程序,这里pwn是文件名checksec发现没有开启任何安全措施程序运行如下:ida64反汇编,发现gets输入没有边界检查0x70,存在注入:secure函数调用......
  • (第二周)第九章学习笔记
    Linux系统设计主要内容本章讨论了I/O库函数,解释了I/O库函数的作用及其相对于系统调用的优势。详细介绍I/O库函数算法,包括fread、fwrite、fclose算法。知识点归纳目录I/O库函数与系统调用I/O库函数算法(1)fread算法(2)fwrite算法(3)fclose算法使用I/O库函数或系统调用I/O......