ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-09-19 20:03:56  阅读:113  来源: 互联网

标签:fp 文件 函数 信息安全 写入 笔记 第二周 缓冲区 库函数


第9章 I/O库函数

教材学习内容总结

本章主要学习回顾C语言中文件读写操作和I/O库函数的相关知识。I/O库函数中的算法fread、fwrite、fclose与系统调用中的read、write、close有着联系与交互;I/O库函数有着多种不同模式;文件缓冲流方案。

一、I/O库函数与系统调用

I/O库函数的根都在对应的系统调用函数中

1、系统调用函数

open():open函数用来打开或创建一个文件,若成功返回文件描述符,否则返回-1。
read() :read函数逐个字节或者字符读取文件中的内容;
write() :write函数会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内。如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入erro 中。
lseek() :每一个已打开的文件都有一个读写位置,当read()或write()时, 读写位置会随之改变,lseek函数是用来控制该文件的读写位置。
close():close函数用于关闭由open函数所打开的文件。

2、I/O库函数

fopen()

fopen函数用于打开文件,第一个形式参数表示文件名,可以包含路径和文件名两部分。其调用格式为:FILE *fopen(char *xxx, *type)。

fread()

fread函数用于从文件流中读取数据。

fwrite()

fwrite函数写入文件(可安全用于二进制文件)返回写入的字符数,出现错误时则返回 false。

fseek()

fseek函数用于重定位流上的文件指针,成功则返回0,否则返回其他值。

fclose()

fclose()函数用来关闭一个由fopen()函数打开的文件,其调用格式为int fclose(FILE *stream)。该函数返回一个整型数。当文件关闭成功时,返回0,否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。

二、I/O库函数算法

1、fread算法

第一次调用时,fread()使用保存的文件扫描符fd发出 n=read(fd, fbuffer, BLKSIZE);系统调用,用数据块填充内部的fbuff[];
初始化fbuff[]指针、计数器和状态变量;
将数据复制到程序缓冲区;
若内部缓冲没有足够的数据,则使用read()继续填充内部缓冲区,并将数据从内部缓冲区复制到程序缓冲区;
复制完之后,更新内部缓冲区的指针、计数器,为下次read()做准备。

2、fwrite算法

将数据写入内部缓冲区,调整缓冲区指针、计数器和状态变量;
若缓冲区满,则调用write()将缓冲区写入系统内核。

3、fclose算法

关闭文件流局部缓冲区;
发出close(fd)系统调用关闭file结构体文件描述符;
释放file结构体,并将file指针重置为null。

三、I/O库模式

“r”:打开一个用于读取的文件。该文件必须存在。
“w”:创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。
“a”:追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。
“r+”:打开一个用于更新的文件,可读取也可写入。该文件必须存在。
“w+”:创建一个用于读写的空文件。
“a+”:打开一个用于读取和追加的文件。

1、字符模式I/O

int fgetc(FILE *fp):
int ungetc(int c ,FILE *fp);
int fputc(int c,FILE *fp);
fgetc()返回的是整数,而不是字符,因为他必须在文件结束时返回文件结束符。文件结束符通常是-1,将他与文件流中的任何字符分开。

2、行模式I/O

char *fgets(char *buf,int size,FILE *fp):从fp中读取最多为一行(以\n结尾)的字符。
int fputs(char *buf,FILE *fp):将buf中的一行写入fp中。

3、格式化I/O

格式化输入:
scanf(char *FMT ,&items);
fscanf(fp,char *FMT ,&items);
格式化输出:
printf(char *FMT,items);
fprintf(fp,char *FMT,items);

4、内存中的转换函数

sscanf(buf ,FMT,&items);
sprintf(buf ,FMT, items);

四、文件流缓冲

三种文件缓冲方案

无缓冲_IONBUF:从非缓冲流中写入(读取)的字符将尽快单独传输到文件(从文件传输)
行缓冲_IOLBUF:遇到换行符,写入行缓冲流的字符以块的形式传输,如文件流stdout
全缓冲_IOFBUF:文件流的正常缓冲方案,以块大小传出

五、实践

1、编写C程序,将字符写入文本文档

2、编写C程序,计算文本文件的行数

3、编写C程序,计算文本文件的单词数

问题

1、文件操作都有什么?

打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件

2、二进制文件和文本文件如何转换?

编译一个文本文件为二进制数据文件,需按行读取文件,利用strchr 或 strtok函数分割字符串,解析数据,进行转换,把字符对应的AscII码字符(10进制)转换成八位2进制,存储到文件。
而将二进制数据文件转换为文本文件就是上述过程的逆过程,即将二进制数转化为十进制数。

标签:fp,文件,函数,信息安全,写入,笔记,第二周,缓冲区,库函数
来源: https://www.cnblogs.com/daijunxi2019/p/15311200.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有