信息安全系统设计与实现(上)第九章学习笔记

信息安全系统设计与实现

第九章 I/O库函数

I/O库函数

I/O库函数与系统调用

系统调用函数:open()、read()、write()、lseek()、close()
I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()

I/O库函数的算法

  1. fread算法
    Reads data from a stream.
    include<stdio.h>
    size_t fread( voidbuffer, size_t size, size_t count,FILEstream );
    从一个文件流中读数据,读取count个元素,每个元素size字节.如果调用成功返回count
    如果调用成功则实际读取sizecount字节
    buffer的大小至少是size
    count 字节.
    return:
    fread returns the number of full items actually read
    实际读取的元素数.如果返回值与count(不是count*size)不相同,则可能文件结尾或发生错误
    从ferror和feof获取错误信息或检测是否到达文件结尾 (https://blog.csdn.net/dreamzuora/article/details/53305839?utm_source=blogxgwz7)
  2. fwrite算法
    size_t fwrite(const void* buffer,size_t size, size_t count, FILE* stream);
    功能:
    向文件中写入一个数据块。(写入的数据不限于文本格式,也可以是二进制文件等)
    返回值:返回实际写入的数据块数。
    参数:
  1. buffer是一个指针。对fwrite来说是要写入数据的地址。
  2. size是要写入内容的单字节数。
  3. count是要 进行写入size字节的数据项的个数。
  4. stream为目标文件指针
  5. 返回实际写入的数据项个数count。
    说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从filepointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。(https://blog.csdn.net/stf1065716904/article/details/73656025)
  1. fclose算法
    fclose()函数用来关闭当前文件流,其原型为:
    int fclose(FILE * stream);
    若关文件动作成功则返回0,有错误发生时则返回EOF,并把错误代码存到errno。
    fclose()用来关闭fopen()打开的文件,此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。
    注意:使用fopen()打开的文件,一定要记得使用fclose()关闭,否则会出现很多意想不到的情况,例如对文件的更改没有被记录到磁盘上,其他进程无法存取该文件等。(http://c.biancheng.net/cpp/html/2505.html)

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

I/O库模式

r读w写a追加
r+读/写不会截断文件
w+读/写会截断文件,若文件不存在会创建文件
a+通过追加读/写文件,若文件不存在会创建文件

  1. 字符模式I/O
  2. 行模式I/O
  3. 格式化I/O
  4. 内存中的转化模式
  5. 其他I/O库函数
  6. 限制混合fread-fwrite

文件流缓冲

变参函数

编程项目:类printf函数

  1. 项目规范
  2. 项目基本代码
  3. myprintf()的算法
  4. 项目改进
  5. 项目演示和示例解决方案

习题

学习心得

总的来说这两章知识高屋建瓴地描述了Linux系统的架构和运转过程,让我有了一个粗浅的概略了解,其中还涉及不少数据结构课程的知识,需要多多进行复习和练习才行

Q&A

Q:文件操作都有什么?

A:打开、关闭、读、写、搜索

Q:二进制文件和文本文件如何转换?
A:使用xxd -b命令

Q:数据结构如何读写?
A:使用系统调用或者I/O库函数

posted @ 2021-09-26 21:55  dky20191311  阅读(45)  评论(0编辑  收藏  举报