1.2号io网络

关于缓冲区问题

缓冲区的分类

行缓存:和终端相关的读写操作指针对应的缓冲区称为行缓存(stdin、stdout),大小为1024字节

1.2号io网络_第1张图片

全缓存:和文件相关的读写操作指针对应的缓冲区称为全缓存(fp),大小为4096字节

1.2号io网络_第2张图片

不缓存:和标准出错输出流相关的文件指针对应的缓冲区(stderr),大小为0

1.2号io网络_第3张图片

缓冲区的刷新时机

行缓存刷新时机

1.2号io网络_第4张图片

全缓存刷新时机

#include

int fflush(FILE *stream);

功能:刷新指定的文件指针的缓冲区

参数:要刷新的缓冲区文件指针

返回值:成功返回0,失败返回EOF,并置位错误码

1.2号io网络_第5张图片

不缓存的刷新时机

1.2号io网络_第6张图片

fprintf、fscanf函数

int fprintf(FILE *stream, const char *format, ...);

功能:向指定的文件中,输出指定的格式串

参数1:要被输出的文件

参数2:格式串,可以包含格式控制符

参数3:不定参数,根据参数2中的格式控制符而定

返回值:成功返回输出的字符个数,失败返回EOF

int fscanf(FILE *stream, const char *format, ...);

功能:从给定的文件中,以指定的格式,读取数据到程序中来

参数1:指定的文件指针

参数2:格式串,可以包含格式控制符

参数3:不定参数,根据参数2中的格式控制符而定

返回值:成功返回写入数据的个数,失败返回一个负数,并置位错误码

fwrite、fread函数

#include

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:从stream指向的文件中读取nmemb项数据,每一项的大小为size,将数据存储在ptr指向的空间中

参数1:存放数据的起始地址

参数2:每一项的大小

参数3:读取数据的总项数

参数4:要被读取的文件

返回值:成功返回读取的项数,失败返回一个小于项数的值 注意:fread出错时,并不能区分是因为文件读取结束还是程序调用出错,需要使用feof或ferror来判断

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:将ptr指针指向的空间中,以每项大小为size字节,的nmemb项数据,写入到stream指向的文件中

参数1:要写入的数据起始地址

参数2:每一项的大小

参数3:写入数据的总项数

参数4:要被写入的文件

返回值:成功返回写入的项数,失败返回返回一个小于项数的值,或者是0

feof、ferror函数

由于fread出错时,不区分到低是文件结束函数调用失败,需要使用对应函数判断

int feof(FILE *stream);

功能:判断给定的文件指针是否已经到文件末尾

参数:文件指针

返回值:如果到达文件末尾返回值真,否则返回假

int ferror(FILE *stream);

功能:判断文件指针使用是否出错

参数:文件指针

返回值:如果出错返回值真,否则返回假

关于光标的函数(fseek、ftell、rewind)

int fseek(FILE *stream, long offset, int whence);

功能:将指定的文件指针从指定的位置处开始偏移

参数1:文件指针

参数2:偏移量 >0:表示向后偏移

                          =0:表示不偏移

                          <0:表示下向前偏移

参数3:偏移的起始位置

                        SEEK_SET:文件起始位置

                        SEEK_CUR:文件当前位置

                        SEEK_END:文件结尾位置

返回值:成功返回0,失败返回-1并置位错误码

long ftell(FILE *stream);

功能:返回当前光标所在位置

参数:文件指针

返回值:当前文件指针所在位置,失败返回-1,并置位错误码

void rewind(FILE *stream);

功能:将光标重新定位在开头 : fseek(fp,0,SEEK_SET)

参数:文件指针

返回值:无

面试题

1.标准IO和文件IO的区别

文件io是不带缓存的io,每次调用都要用到内核中的系统调用,效率较低。

标准io依赖库函数,程序提供的函数,该函数封装了一个缓冲区 ,将要操作的数据放入缓冲区,待达到 刷新时机后,再调用系统调用函数,统一刷入内核,效率较高

2.什么是IO

i :input    o:output

程序与外部设备传递信息的过程

3.什么是文件指针

FILE是stdio.h中自带的结构体,结构体描述了文件所有信息,用 fopen函数打开一个文件所返回的

值就是文件指针

结构体包含两部分:缓冲区大小,用于标准io;文件描述符,用于文件io

4.简述系统调用

文件io需要用到系统调用,依赖内核提供的函数 ,从用户空间向内核空间进行切换,效率较低

5.判断单向链表的环

遍历所有单向链表的节点,判断有没有多次使用同一地址,有代表出现环

1.使用fread、fwrite完成两个文件的拷贝

1.2号io网络_第7张图片

2.将注册登录框架重新实现一遍

1.2号io网络_第8张图片

3.完成图像文件信息的读写操作

1.2号io网络_第9张图片

你可能感兴趣的:(笔记)