信息安全系统设计与实现(上)第九章学习笔记
信息安全系统设计与实现
第九章 I/O库函数
I/O库函数
I/O库函数与系统调用
系统调用函数:open()、read()、write()、lseek()、close()
I/O库函数:fopen()、fread()、fwrite()、fseek()、fclose()
I/O库函数的算法
- 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的大小至少是sizecount 字节.
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) - fwrite算法
size_t fwrite(const void* buffer,size_t size, size_t count, FILE* stream);
功能:
向文件中写入一个数据块。(写入的数据不限于文本格式,也可以是二进制文件等)
返回值:返回实际写入的数据块数。
参数:
- buffer是一个指针。对fwrite来说是要写入数据的地址。
- size是要写入内容的单字节数。
- count是要 进行写入size字节的数据项的个数。
- stream为目标文件指针
- 返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从filepointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。(https://blog.csdn.net/stf1065716904/article/details/73656025)
- 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+通过追加读/写文件,若文件不存在会创建文件
- 字符模式I/O
- 行模式I/O
- 格式化I/O
- 内存中的转化模式
- 其他I/O库函数
- 限制混合fread-fwrite
文件流缓冲
变参函数
编程项目:类printf函数
- 项目规范
- 项目基本代码
- myprintf()的算法
- 项目改进
- 项目演示和示例解决方案
习题
学习心得
总的来说这两章知识高屋建瓴地描述了Linux系统的架构和运转过程,让我有了一个粗浅的概略了解,其中还涉及不少数据结构课程的知识,需要多多进行复习和练习才行
Q&A
Q:文件操作都有什么?
A:打开、关闭、读、写、搜索
Q:二进制文件和文本文件如何转换?
A:使用xxd -b命令
Q:数据结构如何读写?
A:使用系统调用或者I/O库函数