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

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

时间:2023-09-15 18:33:50浏览次数:44  
标签:fp 文件 gp int 信息安全 笔记 第二周 FILE txt

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

第九章 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结构体 内部缓冲区的调用
    • fwirite算法:与fread类似,只是数据传输方向不同
    • fclose算法:
      1. 若文件以写的方式被打开,fclose会先关闭文件流的局部缓冲区。
      2. 然后,它会发出一个close(fd)系统用来关闭FILE结构体中的文件描述符。
      3. 最后,它会释放FILE结构体,并将FILE指针重置为NULL
  • I/O库模式
    • fopen()
      • r:读
      • w:写
      • a:追加
      • r+:读/写,不会截断文件
      • w+:读/写,先截断文件;若文件不存在,会创建文件
      • a+:通过追加进行读/写;若文件不存在,会创建文件
    • 字符模式I/O
      int fgetc(FILE *fp); // get achar from fp, cast to int
      int ungetc(int c, FILE *fp); // push a prviously char got by fgetc() back to stream
      int fputc(int c, FILE *fp); // put a char to fp
  • 实践:编写一个C程序,将文本文件中的字母由小写转换为大写

    将source.txt文件中的小写字母转换成大写字母存入target.txt中

    source.txt文件中的内容

    执行代码

    target.txt文件中的内容
    我的代码如下:
/* this file is used to convert lowercase letters to uppercase letters in the file */
#include <stdio.h>
FILE *fp,*gp;
int main()
{
  int c;
  fp = fopen("source.txt","r");
  gp = fopen("target.txt","w");
  while((c=getc(fp))!= EOF)
    putc(c-32,gp);
  fclose(fp);
  fclose(gp);
  return 0;
}
  • 产生的问题:source.txt文件内容是“abcdefg”,然而target.txt中的内容却多了个问号,不是很理解原因。
    对此GPT给出的答案如下:

    执行结果,问号不见了

    修改后的代码如下:
/* this file is used to convert lowercase letters to uppercase letters in the file */
#include <stdio.h>
FILE *fp,*gp;
int main()
{
  int c;
  fp = fopen("source.txt","r");
  gp = fopen("target.txt","w");
  while((c=getc(fp))!= EOF)
  {
	  if(c!=EOF)
		  putc(c-32,gp);
  }
  fseek(gp, -1, SEEK_CUR);
  fputc('\n',gp);

  fclose(fp);
  fclose(gp);
  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);
    fscanf(fp, char *FMT,&items);
    
    • 格式化输出:
    printf(char *FMT,items);
    fprintf(fp,char *FMT,items);
    
  • 内存中的转换函数

    sscanf(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

  • 文件流缓冲

    • 无缓冲:从非缓冲流中写入或读取的字符将尽快单独传输到文件或从文件中传输。
    • 行缓冲:遇到换行符时,写入行缓冲流的字符以块的形式传输。
    • 全缓冲:写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。这是文件流的正常缓冲方案。
      setvbuf(FILE *stream,char *buf , int node,int size)
      
  • 变参函数:在I/O中 printf()相当独特,多种类型的可变数量参数都可以调用它

GPT苏格拉底挑战

  • I/O库模式
    image
    image
    image
    image
    image
    image
    image

  • 文件流缓冲
    image
    image
    image
    image
    image

标签:fp,文件,gp,int,信息安全,笔记,第二周,FILE,txt
From: https://www.cnblogs.com/wangqi3206/p/17705169.html

相关文章

  • 3dmax自用快捷键笔记
    3dmax自用快捷键笔记G隐藏或显示网格ALT+W全屏模式ALT+Q独立显示ALT+X物体透明显示W移动Z找回物体缩放模式(大化)CTRL+Z撤回(最多撤回9步)F1帮助文件F3线框显示F4明暗处理+边面M材质编辑器J框显示切换A角度捕捉S......
  • Qemu源码分析(2)—Apple的学习笔记
    一,前言最近从main开始看了opt参数相关的解析,这个比较简单我就不写了,然后当时我搞不清楚的是MachineClass和TypeImpl类的关系。本节主要分析的其实就是分析machine_class怎么来的,其实也就是machine_class=select_machine();二,源码分析关于mc的来历type_initialize中ti->class->ty......
  • FATs文件系统笔记
    1.设备状态获取点击查看代码DSTATUSdisk_status(BYTEpdrv/*物理编号*/){DSTATUSstatus=STA_NOINIT;switch(pdrv){caseATA:/*SDCARD*/break;caseSPI_FLASH:/*SPIFlash状态检测:读取SPIFlash设备ID*/......
  • linux里python读写mssql数据库的笔记
    1、安装pyodbcpip3installpyodbc我用的debian12,可以直接aptinstallpython3-pyodbc2、还需要安装linux版的mssqlclient参考这里:https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver......
  • UE4 笔记
    1.FString转TCharTChar*c=(*FString)2.TChar*与char*的互相转换,主要是使用下面的四个宏定义。TCHAR_TO_ANSI(str)ANSI_TO_TCHAR(str)TCHAR_TO_UTF8(str)UTF8_TO_TCHAR(str)[C4668]没有将_WIN32_WINNT_WIN10_TH2"定义为预处理器宏,用0“替换"#if/#elif"添......
  • 【刷题笔记】51. N-Queens
    题目Then-queenspuzzleistheproblemofplacingnqueensonann×nchessboardsuchthatnotwoqueensattackeachother.Givenaninteger n,returnalldistinctsolutionstothe n-queenspuzzle.Eachsolutioncontainsadistinctboardconfigurationoft......
  • HBase/Hadoop学习笔记 (转)
    HBase/Hadoop学习笔记  学习目标:至少掌握五点: 1.    深入理解HTable,掌握如何结合业务涉及高性能的HTable。 2.    掌握与HBase的交互,通过HBaseShell命令及JavaAPI进行数据的增删改查。 3.    掌握如何用MapReduce分析HBase里的数据 4.    掌握如何测试HB......
  • 20211326德永学习笔记2
    第九章总结要点1.I/O库函数与系统调用系统调用函数:open()、read()、write()、lseek()、close();I/O库函数:fopen()、fread()、fwrite()、flseek()、fclose()。I/O库函数一一对应地依赖于系统调用函数。2、I/O库函数的算法-2.1fread算法在第一次调用fread()时,FILE结构体的缓......
  • 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{的......