目录
实现一个函数 file_read:把文件所有内容读到一个buf里
1. 实现一个函数 file_write_format:格式化写文件
2. 实现一个函数 file_write_buff:读将buf数据写入文件里
7. ftell() 返回给定流 stream 的当前文件位置
2.#include dirent.h 文件夹操作函数。GCC,非ANSI C。
还待完善.............
非缓冲
IO操作数据流向路径:数据->内核缓冲区->磁盘
带缓冲
IO操作数据流向路径:数据->流缓冲区->内核缓冲区->磁盘
无缓存只不过是指在用户层
没有缓存,但对于内核来说,还是进行了缓存
(以下百度)
1.非缓冲文件系统(open)
非缓冲文件系统依赖于操作系统(系统函数),通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。函数包括
open, close, read, write, fcntl, getc, getchar, putc, putchar
等。缓冲文件系统是借助文件结构体指针来对文件进行管理(库函数),通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数据。缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。函数包括
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind
等
缓冲文件系统
fopen() 打开流 fclose() 关闭流 fgetc() 从流中读一个字符 fgets() 从流中读一行或指定个字符(字符串) fscanf() 从流中按格式读取 fread() 从流中读指定个数的字符 fputc() 写一个字符到流中 fputs() 写字符串到流 fprintf() 按格式输出到流 fwrite() 向流中写指定个数的字符 fseek() 在流中定位到指定的字符 rewind() 复位文件定位器到文件开始处 ftell() 返回给定流 stream 的当前文件位置
非缓冲文件系统
open() 打开一个文件并返回它的句柄 close() 关闭一个句柄 lseek() 定位到文件的指定位置 read() 块读文件 write() 块写文件 eof() 测试文件是否结束 filelength() 取得文件长度 rename() 重命名文件
缓冲文件系统
fopen() fclose() fputc() 写 一个字符到流中 fputs() 写 字符串到流 fprintf() 按 格式输出到流 fwrite() 向流中写 指定个数的字符 fgetc() 从流中读 一个字符 fgets() 从流中读一行或指定个字符 fscanf() 从流中按 格式读取 fread() 从流中读 指定个数的字符 fseek() 在流中定位到 指定位置的字符 rewind() 复位文件定位器到文件开始处 fsteel() 返回给定流 stream 的当前文件位置
缓冲文件系统 函数名称 功能 返回值说明 注意 fopen()
FILE *fopen(char *filename, char *mode);
打开文件 fclose()
int fclose(FILE *fp);
关闭文件 fputc()
int fputc(int c, FILE *stream);
写一个字符到流中 fputs()
int fputs(const char *s, FILE *stream);
写字符串到流 fprintf()
int fprintf(FILE *stream, const char *format, ...);
按格式输出到流 fwrite()
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
向流中写指定个数的字符 返回实际写入的数据项个数count。
ptr-- 写入的元素数组的指针。
size-- 写入的每个元素的大小,以字节为单位。
nmemb-- 这是元素的个数,每个元素的大小为 size 字节。
stream-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流
总共写入 : size * numemb 个字节
fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步
fgetc()
int fgetc(FILE *stream);
从流中读一个字符 fgets()
char *fgets(char *s, int size, FILE *stream);
从流中读一行或指定个字符