20201305学习笔记2
第九章库函数
总述
本章主要讨论了I/O库,包括I/O库函数的作用以及相对系统调用的优势,以及I/O库的算法和不同的模式;阐述了文件流缓冲方案。主要是让我们学会如何实现它。
学习内容
(一)I/O库函数
定义
这是一系列文件操作函数,因为文件操作的基础是系统调用,但是它只支持数据块的读写,功能不够全面,所以用读写为基础去写函数来实现用户想要的操作
,所以I/O库函数建立在系统调用的基础上。
系统调用函数:
open()用于创建一个新的文件描述符
read()读取文件,从文件描述符 fildes 相关联的文件里读入 nbytes 个字节的数据,并把它们放到数据区 buffer 中
write()把缓冲区 buffer 的前 nbytes 个字节写入与文件描述符 fildes 关联的文件中
lseek()用于改变读写操作时的位置指针
close()终止文件描述符 fildes 与其对应文件之间的关联
I/O库函数:
fopen()用于对文件和终端的输入输出
fread()从一个文件流里读取数据,数据从stream读到由ptr指定的数据缓冲区里面;
fwirte(),从stream获取数据记录写到ptr中,返回值是成功写入的记录个数
fseek()在文件流里面为下一次读写指定位置
fclose(),关闭指定的文流stream,使所有未写出的内容全部写出。
(二)I/O库模式
r读w写a追加
r+读/写不会截断文件
w+读/写会截断文件,若文件不存在会创建文件
a+通过追加读/写文件,若文件不存在会创建文件
字符模式I/O
- int fgetc(FILE *fp);
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。 - int ungetc(int c, FILE *fp);
如果成功,则返回被推入的字符,否则返回 EOF,且流 stream 保持不变。 - int fputc(int c, FILE *fp);
如果没有发生错误,则返回被写入的字符。如果发生错误,则返回 EOF,并设置错误标识符。
行模式I/O
- char *fgets(char *buf, int size, FILE *fp);
从fp中读取最多的为一行(以\n结尾)的字符。 - int fputs(char *buf,FILE *fp);
将buf中的一行写入fp中。
格式化I/O
- 格式化输入
- scanf(char *FMT,&items);
- fscanf(fp, char *FMT,&items);
- 格式化输出
- printf(char *FMT,items);
- fprintf(fp,char *FMT,items)
- 内存中的转化模式
- printf(char *FMT,items);
- fprintf(fp,char *FMT,items);
- 其他I/O库函数
- fseek()、ftell()、rewind()
更改文件流中的读/写字节位置 - feof()、ferr()、fileno()
测试文件流状态 - fdopen()
用文件描述符打开文件流 - freopen()
以新名称重新打开现有的流 - setbuf()、setvbuf()
设置缓冲方案 - popen()
创建管道,复刻自进程来调用sh
- fseek()、ftell()、rewind()
- 限制混合fread-fwrite
(三)文件流缓冲
每个文件流都有一个FILE结构体,其中包含一个内部缓冲区。对文件流进行读写需要遍历FILE结构体的内部缓冲区。文件流可以使用三种缓冲方案中的一种。
无缓冲
从非缓冲流中写入或读取的字符将快单独传输到文件或从文件中传输。
行缓冲
遇到换行符时,写人行缓冲流的字符以块的形式传输。
全缓冲
写入全缓冲流或从中读取的字符以块大小传输到文件或从文件传输。
学习中的问题
二进制文件和文本文件如何转换
解决方法
使用xxd -b命令,或者设置打开方式后用另一种方式存储,例如读取2进制文件后以文本文件方式存储(百度得到)https://blog.csdn.net/qq1140920745/article/details/114642515?ops_request_misc=&request_id=&biz_id=102&utm_term=linux二进制文件和文本文件如何转换&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-114642515.142v47pc_rank_34_default_3,201v3control_2&spm=1018.2226.3001.4187
我对基本的文件操作还不理解很透彻
解决方法
在csdn加深学习
https://blog.csdn.net/Nick_Di/article/details/118193031
数据结构读写
解决方法
https://blog.csdn.net/ssxxgg123/article/details/120802370?ops_request_misc=&request_id=&biz_id=102&utm_term=数据结构读写文件&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-120802370.142v47pc_rank_34_default_3,201v3control_2&spm=1018.2226.3001.4187
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具