c库中 关于文件操作的一套函数 称为标准io。I输入 O输出Linux操作系统当中IO都是对文件的操作。输入输出是以计算机中的内存为参考点。如果写入内存的被称为输入 键盘和鼠标是标准输入设备。如果从内存中输出数据被称为输出显示器是标准输出设备。一、关于Linux系统函数不需要记忆使用时会通过手册查询就行man 1 xxx /man xxx 查看当前xxx命令man 2 xxx 查看xxx对应的系统调用(linux系统 )函数 man 3 statman 3 xxx 查看xxx对应的标准库(C 库)函数命令的查询用man 1函数的查询不用刻意记忆不是man 2就是man 3。二、文件操作的步骤对于任意一个文件的操作都遵从以下三个步骤1.打开文件。FILE *fopen(const char *pathname, const char *mode);功能打开一个文件并返回文件流指针linux 通过内部描述一个文件的结构体通过这个结构体来管理计算机上所有的文件)。参数pathname要打开的文件的路径mode对这个文件的操作模式r 只读 文件不存在报错 文件存在则只读打开r 读写 文件不存在报错 文件存在则读写打开w 只写 文件不存在则创建文件存在则清0只写打开w 写读 文件不存在则创建文件存在则清0写读打开a 追加可写 文件不存在则创建 文件存在则追加只写打开返回值成功建立的文件流指针失败NULL2.读写操作①读写单个 字符fputc/fgetcint fputc(int c, FILE *stream);功能: 向流中写入一个字符参数:c:要写入的字符stream:文件流指针返回值:成功写入的字符ASCII码值失败EOFfgetc int fgetc(FILE *stream);功能: 从流中读取一个字符参数:stream:文件流指针返回值:成功返回读到字符的ASCII码值 读到文件末尾返回EOF②读写字符串 fputs/fgetsint fputs(const char *s, FILE *stream);功能从s所在的本地内存中获取一行数据并写入stream对应的文件 流对象。参数s 要写的信息一般是固定的字符串或者有数据的数组。stream 要写入的目标文件流对象返回值成功非负失败 -1char *fgets(char *s, int size, FILE *stream);功能从stream流对象关联的文件中获取size大小字节的文本数据 并存储到s对应的本地内存(栈区数组堆区内存)参数s 要存储数据的本地内存 size 要获取的数据长度单位字节。stream 要获取的目标文件流对象 可以是stdin 程序会阻塞等待 如果是普通文件fp 则指向文件第一行数据返回值成功指向有效数据的首地址一般等于s的地址失败 或者 文件末尾 NULL③读写二进制文件或文本文件size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);功能从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr所在的本地内存中。参数ptr : 要存储数据的本地内存一般是数组或者结构体指针size : 单个数据块的元数据大小。最小单元的大小nmemb :要获取的数据块的个数拷贝的数据块个数。stream :要获取数据的源文件流对象如果是stdin表示从键盘获取数据如果是fp文件则表示从普通文件获取。返回值成功 小于等于nemeb的整数表示获取的数据长度失败 小于0读到结尾 也是0size_t fwrite(const void *ptr, size_t size,size_t nmemb, FILE *stream);功能从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应的文件流对象中。参数ptr 要写的数据块地址一般是数组或者结构体指针size 要写的数据块元数据大小单位是字节nmemb 要写的数据块的个数stream 要写的目标文件流对象。如果是stdout表示数据会写到终端屏幕显示如果是fp的普通文件则会写入到文件中。返回值成功 小于等于nmemb 的个数。失败 03.关闭文件。对文件不需要读写操作了就可以关闭对相关资源释放。int fclose(FILE *stream);功能关闭stream流对象关联的文件。参数stream 要关闭的目标文件流对象。返回值成功0失败 EOF三、其他函数1.文件定位int fseek(FILE *stream, long offset, int whence);功能将stream流文件中的文件指针从whence位置开始偏移offset字节的长度。参数stream 要移动文件指针的目标文件流对象。offset 要在文件内偏移的距离单位字节。如果值为整数则向文件末尾偏移如果值为负数则向文件开头偏移whence 偏移的起始位置,由系统定义的三个宏开始。SEEK_SET 文件的开头位置SEEK_CUR 文件的当前位置SEEK_END 文件的末尾位置返回值成功 返回 0失败 -12.计算文件大小long ftell(FILE *stream);rewind(fp);功能获取当前文件流指针的具体位置一般以文件开头到当前指针的字节数为返回值。参数stream 要返回指针距离的文件流对象返回值成功 获取到的距离长度单位是字节失败 -1搭配fseek使用eg:fseek(fp,0,seek_end);//先定位到最后long size ftell(fp);//再看从文件开头到定位处返回的字节数就是文件大小。3.文件流指针复位void rewind(FILE *stream);功能把文件读写的位置复位到开始的地方。参数需要被操作的文件流指针返回值空*特别是用了fseek和ftell函数搭配求出文件大小后想再对文件进行操作但是文件流指针此时的位置在文件末尾此时进行读写操作结果就是错误的我们在计算完文件大小后应该及时让文件流指针复位这是在实际操作时容易遗漏的问题。
阅读完成 · 觉得有帮助?