新闻详情

新闻详情

首页 / 资讯中心 / 详情

吃透标准 IO:缓冲区、读写流程避坑完整总结

发布时间:2026/8/31 14:49:03来源:尧图网络
吃透标准 IO:缓冲区、读写流程避坑完整总结
标准IO总结标准IO是标准C库提供的库函数头文件stdio.h操作对象为文件流指针FILE*。底层会调用文件IO系统调用自带用户层缓冲区可移植性强。一、系统预定义3个文件流流指针含义对应硬件文件IO等价fdstdin标准输入流键盘0stdout标准输出流显示屏1stderr标准出错流显示屏2二、缓冲区分类行缓冲默认1K用于终端设备刷新条件遇到\n、程序结束、fflush()强制刷新、缓冲区满。全缓冲默认4K用于普通文件刷新条件程序结束、文件关闭、缓冲区写满、fflush()强制刷新。无缓冲stderr数据直接输出不缓冲。三、核心API1. fopen 打开文件FILE *fopen(const char *pathname, const char *mode);功能打开文件将文件关联到文件流。参数pathname文件名/路径字符串形式。mode打开模式字符串r只读文件必须存在r读写文件必须存在w只写不存在创建存在清空文件w读写不存在创建存在清空文件a只写追加不存在创建写总是在文件末尾a读写追加读从文件开头写永远在文件末尾返回成功返回FILE*失败返回NULL。2. fclose 关闭文件int fclose(FILE *stream);参数文件流指针。返回成功0失败EOF(-1)。注意不关闭会造成文件描述符泄漏。3. 单字符读写 fgetc / fputcint fputc(int c, FILE *stream); //写一个字符 int fgetc(FILE *stream); //读一个字符fputc写入字符putchar(a)等价于fputc(a,stdout)。fgetc读到字符返回对应值读到文件末尾/出错返回EOF(-1)。4. 按行读写 fgets / fputschar *fgets(char *s, int size, FILE *stream); int fputs(const char *s, FILE *stream);fgets最多读取size‑1字节末尾自动补\0会读取换行符\n出错/到文件末尾返回NULL安全防止越界。fputs写入字符串不会写入\0。gets函数不安全已经废弃。5. 块读写 fread / fwrite多用于二进制文件size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);ptr数据缓冲区首地址size单个元素字节大小nmemb元素个数stream文件流。返回成功返回实际读写的元素个数。6. 文件流定位函数int fseek(FILE *stream, long offset, int whence); long ftell(FILE *stream); void rewind(FILE *stream);fseek重定位读写位置whence取值SEEK_SET文件开头、SEEK_CUR当前位置、SEEK_END文件末尾。ftell获取当前位置距离文件开头的字节偏移。rewind将读写位置复位到文件开头。获取文件大小代码片段fseek(fp,0,SEEK_END); long len ftell(fp); rewind(fp);7. 格式化输出相关printf(); //输出到stdout fprintf(FILE *stream,...);//输出到指定文件流 sprintf(char *str,...); //输出到内存字符数组用于字符串格式化拼接四、主函数命令行传参int main(int argc, const char *argv[])argc命令行参数总个数。argv字符串指针数组保存各个参数字符串argv[0]是程序本身名字。示例./a.out 1.txt 2.txtargc3argv[0]“./a.out”argv[1]“1.txt”argv[2]“2.txt”。五、标准IO特点小结C库函数可移植性强。用户层自带缓冲区减少用户态内核态切换读写效率高。操作对象FILE*文件流指针。主要用于普通文件操作。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于STM32的智能鱼缸系统设计:从传感器到自动控制的嵌入式实战 2026/8/31 14:44:59

基于STM32的智能鱼缸系统设计:从传感器到自动控制的嵌入式实战

简介:本资源是一套完整的STM32嵌入式毕业设计项目,面向电子信息、自动化及物联网方向的本科生与嵌入式初学者,解决智能水产养殖系统中环境监测、自动调控与远程交互等典型工程问题。压缩包共98个文件,含41个.h头文件(定…

阅读更多 →
人形机器人下一程:从“羞答答”夺冠到系统稳定与工程落地 2026/8/31 14:44:59

人形机器人下一程:从“羞答答”夺冠到系统稳定与工程落地

人形机器人在最近的这场焦点赛事里夺冠,围观者关注的是它“羞答答”的步态和小心翼翼的动作,行业内更在意的却是另外一件事:下一程到底往哪走。这类新闻隔一段时间就会出现,但今年明显不一样,夺冠不再靠某个惊艳动作&a…

阅读更多 →
开源工具将Pull Request变成动画架构图,让结构变化一目了然 2026/8/31 14:44:59

开源工具将Pull Request变成动画架构图,让结构变化一目了然

接手一个新仓库,或者评审一个改动范围比较大的 PR 时,最消耗精力的往往不是读代码本身,而是先要在脑子里拼出“这次改动到底动了架构的哪一块”。文件多了之后,人的短期记忆根本装不下完整的调用链和依赖关系,评审就很…

阅读更多 →
AI编程利器:用Skill自动生成流程图,告别手搓 2026/8/31 14:44:59

AI编程利器:用Skill自动生成流程图,告别手搓

做技术这么多年,我越来越觉得,画流程图这件事,快成了开发者的“时间黑洞”。为什么这么说?你可以回忆一下:接到一个需求,代码逻辑其实想清楚了,但leader让你“先画个流程图确认一下”&#xff1…

阅读更多 →
CT脊柱精细分割与三维智能测量全流程实践 2026/8/31 14:44:59

CT脊柱精细分割与三维智能测量全流程实践

简介:本资源是一套面向医学影像AI研发者、骨科临床工程师及三维建模研究者的高精度CT脊柱结构分割数据集,旨在解决脊柱自动分割精度低、解剖结构覆盖不全、病理泛化能力弱等关键问题,支撑三维重建、椎体测量、手术导航等下游应用。压缩包共93…

阅读更多 →
PrivaZer深度清理指南:清除隐私残留与释放C盘空间 2026/8/31 14:39:58

PrivaZer深度清理指南:清除隐私残留与释放C盘空间

电脑里的隐私残留数据,比大多数人想象的多。删除文件、清空回收站以后,数据并不是立即消失,它可能残留在临时目录、浏览器缓存、缩略图库、日志文件、系统还原点甚至未分配空间中。对于经常外借电脑、准备出售旧硬盘,或者发现C盘爆…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞