ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

C语言文件操作与标准IO详解

C语言文件操作与标准IO详解 1. 文件的基本概念文件存放在磁盘空间中的一段数据的集合是操作系统管理数据的基本单位。2. 文件操作的三个基本步骤打开文件建立程序与文件之间的连接读写文件对文件内容进行读取或写入操作关闭文件断开程序与文件的连接释放资源3. ASCII码文件与二进制文件ASCII码文件一种特殊的二进制文件文件中的每个字符都是能够显示在终端的ASCII码字符。常见类型文本文件、程序源代码二进制文件文件中包含一些不能在终端直接显示的ASCII码字符。常见类型图片、音视频、压缩包4. 标准IO函数接口4.1 fopen函数流Stream有方向性、具有连续性的数据通道。三个标准流会随着程序的执行被默认打开stdin标准输入流stdout标准输出流stderr标准错误流函数原型FILE *fopen(const char *pathname, const char *mode);功能打开pathname对应的文件并与之建立一个流。参数pathname要打开的文件路径字符串首地址mode打开文件的方式r只读。文件不存在报错文件存在只读打开r读写。文件不存在报错文件存在读写打开w只写。文件不存在创建文件存在清空只写打开w写读。文件不存在创建文件存在清空写读打开a追加只写。文件不存在创建文件存在追加只写打开a追加读写。文件不存在创建文件存在追加读写打开返回值成功返回创建的流的空间首地址FILE指针失败返回NULL4.2 fclose函数函数原型int fclose(FILE *stream);功能关闭流。参数stream文件流指针返回值成功返回0失败返回EOF5. 缓存机制标准IO是有缓存的IO用户调用标准IO函数后数据先进入缓存区满足刷新条件时才将数据传递给内核。缓存类型5.1 全缓存缓存区大小4K4096字节刷新条件缓存区满刷新使用fflush强制刷新程序结束或fclose刷新适用场景与文件建立的流都为全缓存5.2 行缓存缓存区大小1K1024字节刷新条件缓存区满刷新使用fflush强制刷新程序结束或fclose刷新遇到\n刷新适用场景与终端建立的流stdin、stdout5.3 不缓存缓存区大小0K立即刷新适用场景出错处理、人机交互、实时性要求高的场景示例stderr6. 文件读写函数接口6.1 fputc函数函数原型int fputc(int c, FILE *stream);功能将字符c写入流中。参数c要写入的字符stream文件流指针返回值成功返回写入字符的ASCII码值失败返回EOF-1练习利用fputc将hello world写入a.txt文件中6.2 fgetc函数函数原型int fgetc(FILE *stream);功能从流中读取一个字符。参数stream文件流指针返回值成功返回接收字符的ASCII码值失败返回EOF读到文件末尾返回EOF练习编写程序统计某个指定文件的行数7. 其他常用文件读写函数fputs/fgets字符串读写fprintf/fscanf格式化读写fwrite/fread二进制读写8. 更多文件操作函数详解8.1 fprintf函数函数原型int fprintf(FILE *stream, const char *format, ...);功能将格式化的字符串写入stream流中。参数stream文件流指针format格式化字符串空间首地址...可变参数列表返回值成功返回打印在终端的字符个数失败返回负数8.2 fputs函数函数原型int fputs(const char *s, FILE *stream);功能将s指向的字符串写入stream流中。参数s要写入字符串空间的首地址stream文件流指针返回值成功返回非负整数失败返回EOF8.3 fgets函数函数原型char *fgets(char *s, int size, FILE *stream);功能从流中读取一行字符串。参数s读取字符串存入空间的首地址size最多读取字符的个数stream文件流指针返回值成功返回s空间地址失败或读到文件末尾返回NULL8.4 fwrite函数函数原型size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);功能向流中写入nmemb个对象每个对象size个字节数据来自ptr指向的空间。参数ptr写入数据空间首地址size每个数据对象的大小nmemb对象个数stream文件流指针返回值成功返回实际写入对象的个数失败返回08.5 fread函数函数原型size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);功能从流中读取nmemb个对象每个对象size个字节存放在ptr指向的空间中。参数ptr存放数据空间的首地址size读取对象的大小nmemb读取对象的个数stream文件流指针返回值成功返回读取对象个数失败或读到末尾返回0练习利用fread和fwrite实现将源图片中的内容拷贝到目的文件中8.6 fseek函数函数原型int fseek(FILE *stream, long offset, int whence);功能重新设置流的偏移量。参数stream文件流指针offset偏移量whenceSEEK_SET定位到文件开头SEEK_CUR定位到当前位置SEEK_END定位到文件末尾返回值成功返回0失败返回-18.7 ftell函数函数原型long ftell(FILE *stream);功能获得流的偏移量。8.8 rewind函数函数原型void rewind(FILE *stream);功能重新将流偏移量定位到开头。练习编写一个程序获得文件的长度9. 综合练习作业1编写程序从给定的src.bmp图片中读取图片的宽度和高度并打印从终端输入一个单词打印出该单词的含义
返回列表