标准IO函数
一、man手册man手册是用于在linux系统中查询命令、函数等的帮助手册不同的章节分类便于快速定位获取各类linux系统相关的帮助信息命令格式查看内容章节说明man manman手册自身的章节说明了解man手册整体架构和使用规范man 1 要查看的内容可执行程序或shell命令的帮助文档“1”对应用户命令章节man 2 要查看的内容系统调用内核提供的函数相关帮助“2”对应系统调用章节man 3 要查看的内容库调用库中的函数相关帮助“3”对应库函数章节二、打开关闭文件函数2.1 fopen函数打开函数项目内容所需头文件#include stdio.h原型FILE *fopen(const char *pathname, const char *mode);功能用标准I/O的方式打开文件pathname参数文件路径和名字不写路径默认打开当前路径下的文件mode参数打开文件的方式见下方mode详细说明表返回值成功返回FILE指针失败返回NULL重置错误码mode参数详细说明mode打开方式文件不存在文件存在光标定位r只读报错正常打开开头r读写报错正常打开开头w只写创建清空开头w读写创建清空开头a追加创建不清空结尾a读和追加创建不清空读开头写结尾2.3 fclose函数关闭函数项目内容所需头文件#include stdio.h原型int fclose(FILE *stream);功能用标准I/O的方式关闭文件stream参数文件指针由fopen返回的FILE*返回值成功返回0返回值失败返回EOF即-1并重置错误码fclose在关闭文件之前会自动将缓冲区中尚未写入文件的数据刷新flush到磁盘然后再关闭文件。三、错误信息函数3.1 内核中错误码的问题在Linux系统中内核通过预定义宏(如 ENOENT)标识错误错误码errno内核返回的为正整数内核返回时传递给应用层用负数传递错误码是int类型的数据应用层看到的是返回值-1表示失败而真正的错误码仍然以正数形式存在errno中。不是把错误码变成负数而是用-1作为“失败”标志。3.2 strerror函数错误码转换为错误信息项目内容所需头文件#include string.h原型char *strerror(int errnum);功能将错误码转换为错误信息errnum参数错误码通常为errno的值返回值成功返回指向错误信息的字符串指针返回值无效errnum返回结果由系统实现决定通常返回通用错误描述如Unknown error nnn3.3 perror函数错误信息打印函数项目内容所需头文件#include stdio.h原型void perror(const char *s);功能打印错误信息参数 s用户的附加信息见下方详细说明返回值无perror函数调用后会自动换行。参数说明条件输出格式示例假设 errno ENOENTs ! NULL且*s ! \0s: 错误消息有空格open failed: No such file or directorys NULL或*s \0不同系统可能输出①: 错误消息② 直接输出错误消息: No such file or directory或No such file or directory四、字符读写函数4.1 fgetc函数读文件项目内容所需头文件#include stdio.h原型int fgetc(FILE *stream);功能从文件流中读取当前位置的字符。每次调用会自动移动文件指针指向下一个字符位置stream参数文件指针由fopen返回的FILE*返回值成功返回无符号字符unsigned char的数值范围 0~255并转换为int返回返回值失败/EOF返回EOF-1fgetc返回的是int类型而不是char类型。虽然它读取的是字符但用int返回是有重要原因的。它返回的是一个数字ASCII码但这个数字可以被直接当作字符来使用。操作数据流向结果fgetc(fp)文件 → 临时内存CPU寄存器数据在比较完后就销毁ch fgetc(fp)文件 → 临时内存 → 变量ch数据永久保存在ch中4.2 fputc函数写入文件项目内容所需头文件#include stdio.h原型int fputc(int c, FILE *stream);功能向文件中写入一个字符参数 c要写入的字符以int形式传递实际存储时会转换为unsigned char参数 stream文件指针由fopen返回的FILE*返回值成功返回写入的字符的 ASCII 码unsigned char转换为int返回值失败返回EOF-1五、字符串读写函数5.1 fgets函数读取项目内容所需头文件#include stdio.h原型char *fgets(char *s, int size, FILE *stream);功能从文件流中读取字符串最多读取size - 1个字符自动添加\0遇到换行符\n或 EOF 时停止换行符会被存储参数 s用于存放读到的内容的内存首地址缓冲区参数 size想要读取的字节数int类型实际最多读取size - 1个字符留一个位置给\0参数 stream文件指针由fopen返回的FILE*返回值成功返回字符串s即指向缓冲区的指针返回值失败/EOF返回NULL5.2 fputs函数写入项目内容所需头文件#include stdio.h原型int fputs(const char *s, FILE *stream);功能将字符串s的内容写入到stream指向的文件中仅写入字符串有效字符不包含末尾\0参数 s要写入字符串的首地址参数 stream文件指针由fopen返回的FILE*返回值成功返回非负整数通常是0或写入的字符数具体取决于实现返回值失败返回EOF-1