文件标准I/O基本操作——FX乐曲时代
在Linux王国的和平年代里,优秀的函数们纷纷踏上了成为直播网红的不归路,造就了最为辉煌的FX乐曲时代
在Linux的文件操作中标准I/O操作与底层I/O操作的对比
比起前辈们(底层I/O操作)的认真率直,新一代的FX组合更是有了不少骚操作(加入了缓存机制)
名称 | 说明 |
---|---|
标准文件I/O操作 | 标准I/O库的所有操作都是围绕流来进行的 标准I/O采用了缓存机制,在内存中开辟缓冲区为程序中的文件使用 针对控制台的打印输出 |
底层文件I/O操作 | 没有缓存机制,需要用户自己建立缓存区 每个文件操作动作都调用内核中的相应系统调用 通过文件描述符来访问文件 针对文件操作和读写硬盘 |
标准I/O里面有着许多各种函数
其中既有读写文件的F6组合,也有
分类方法 | 标准I/O函数 | 函数说明 | |
---|---|---|---|
读写文件 | 每次一定数量的I/O | fwrite() | 每次I/O操作读或写某种数量的对象,而每个对象具有指定的长度 |
fread() | |||
每次一个字符的I/O | fgetc() | 一次读或写一个字符,如果流是带缓存的,则标准I/O函数处理所有缓存 | |
fputc() | |||
每次一行的I/O | fgets() | 一次读或写一行。每行都以一个新行符终止。当调用fgets()时,应说明能处理的最大行长 | |
fputs() | |||
打开文件 | fopen() | 它们可以以不同的模式打开,但都返回一个指向FILE的指针 对文件的读写都是通过这个FILE指针来进行 | |
fdopen() | |||
关闭文件 | fclose() | 该函数将缓冲区内的数据全部写入到文件中,并释放系统所提供的文件资源 | |
定位指针 | fseek() | 用户设定stream流的文件位置指示,调用成功返回 0,失败返回-1 (fseek()的whence参数:SEEK_SET/ SEEK_CUR/ SEEK_END) | |
ftell() | 用于取得当前的文件位置,调用成功则返回当前文件读写位置,若出错则为-1 | ||
rewind() | 用于设定流的文件位置指示为文件开始,该函数调用成功无返回值 rewind()等价于fseek(stream, 0, SEEK_SET) |
读写F6组合
fwrite函数与fread函数
作为F6组合的双人合唱组,唱过的的歌可数不胜数,但每一首歌都会将感情全力倾注,伴随着乐声翩翩起舞
所需头文件 | #include<stdio.h> |
函数原型 | size_t fwrite(const void* ptr, size_t size, size_t nmemb, FILE * stream) |
函数传入值 | ptr:存放写入数据的缓冲区 |
size:写入数据的大小 | |
nmemb:字符串数目 | |
stream:要写入的文件流 | |
函数返回值 | 成功:返回实际写入的nmemb数目 |
失败:返回EOF |
所需头文件 | #include<stdio.h> |
函数原型 | size_t fread(void* ptr, size_t size, size_t nmemb, FILE * stream) |
函数传入值 | ptr:存放读取数据的缓冲区 |
size:读取的数据长度 | |
nmemb:字符串数目 | |
stream:要读取的文件流 | |
函数返回值 | 成功:返回实际读取的nmemb数目 |
失败:返回EOF |
fgetc函数与fputc函数
随着音乐我们走上了舞台,听众们的耳朵早就竖了起来,一下一下清脆的节拍,跟着我们一起狂欢起来!!!!
所需头文件 | #include<stdio.h> |
函数原型 | int getc(FILE * stream) |
int fgetc(FILE * stream) | |
int getchar(void) | |
函数传入值 | stream:要输入的文件流 |
函数返回值 | 成功:返回读取的字符 |
失败:返回EOF | |
备注 | 函数getchar()等同于getc(stdin) |
所需头文件 | #include<stdio.h> |
函数原型 | int putc(int c, FILE * stream) |
int fputc(int c, FILE * stream) | |
int putchar(int c) | |
函数传入值 | stream:要输入的文件流 |
函数返回值 | 成功:返回字符c |
失败:返回EOF | |
备注 | putchar(c)等价于putc(c,stdout) |
fgets函数与fputs函数
乐声一起动心弦,百感交织情亦悬,分连顿跳声不断,不尽此曲誓不停。
所需头文件 | #include<stdio.h> |
函数原型 | char* gets(char* s) |
char fgets(char* s, int size, FILE * stream) | |
函数传入值 | s:要输入的字符串 |
size:输入字符串长度 | |
stream:要输入的文件流 | |
函数返回值 | 成功:返回输入的字符串s |
失败:返回NULL | |
备注 | gets()是一个不推荐使用的函数,因为调用者在使用gets()时不能指定缓存的长度,这样就可能造成缓存越界(如若该行长于缓存长度),写到缓存之后的存储空间中,从而产生不可预料的后果 |
对于fgets()函数,必须指定缓存的长度n 此函数一直读到换行符为止,但是不超过n-1个字符,读入的字符被送入缓存 该缓存以空字符\0结尾 |
所需头文件 | #include<stdio.h> |
函数原型 | int puts(FILE * stream) |
int fputs(FILE * stream) | |
函数传入值 | s:要输出的字符串 |
stream:对应的文件流 | |
函数返回值 | 成功:返回字符串s |
失败:返回NULL |
开天辟地F2组合
fopen函数与fdopen函数
他们作为Linux王国里面的两位混音小王子,fopen注重于把控音轨,fdopen更擅长于把控音源,两者的相互合作造就了一首首激动人心的音乐
所需头文件 | #include<stdio.h> |
函数原型 | FILE* fopen(const char* path, const char* mode) |
函数传入值 | path:包含要打开的文件夹路径及文件名 |
mode:文件打开状态 | |
函数返回值 | 成功:返回指向FILE的指针 |
失败:返回NULL |
所需头文件 | #include<stdio.h> |
函数原型 | FILE* fdopen(int fd, const char* mode) |
函数传入值 | fd:要打开的文件描述符 |
mode:文件打开状态 | |
函数返回值 | 成功:返回指向FILE的指针 |
失败:返回NULL |
传入值mode参照表
参数名 | 参数说明 |
---|---|
r 或 rb | 打开只读文件,该文件必须存在 |
r+ 或 r+b | 打开可读写文件,该文件必须存在 |
w 或 wb | 打开只写文件 若文件存在则将数据清空 若文件不存在则创建该文件 |
w+ 或 w+b | 打开可读写文件 若文件存在则将数据清空 若文件不存在则创建该文件 |
a 或 ab | 以附加方式打开只写文件 若文件不存在则创建该文件 若文件存在则将数据追加到文件尾 |
a+ 或 a+b | 以附加方式打开可读写文件 若文件不存在则创建该文件 若文件存在则将数据追加到文件尾 |
备注 | 如果使用了带b的mode则会告诉函数打开的文件为二进制文件,并非文本文件 |
京剧大师FC(关闭文件)
fclose函数
fclose是公认的京剧大师,其中巧妙的收音吸引力无数的观众前来。
有一次她接受了fopen和fdopen的挑战,最后胜在自己气息斗过了他们混音器的电量
所需头文件 | #include<stdio.h> |
函数原型 | int fclose(FILE * stream) |
函数传入值 | stream:指向 FILE 对象的指针 |
函数返回值 | 成功:返回0 |
失败:返回EOF |
移动steam流指针FFR团
fseek、ftell和rewind组成了一个强大的唱、跳、Rap团队,其中fseek擅长从乐章的任何一个地方起唱(通过whence定位),ftell随着fseek唱的位置而跳起相应的舞蹈(定位指针当前的位置),rewind则能通过Rap去指挥其他人回到乐章的开头(设定流的文件位置指示为文件开始),他们的乐曲几乎完全停不下来,一次就能唱好几天。
fseek函数
所需头文件 | #include<stdio.h> | |
函数原型 | int fseek(FILE * stream, long offest, int whence) | |
函数传入值 | stream | 指向 FILE 对象的指针 |
offest | 偏移量(有正负) | |
whence(起始点) | SEEK_SET:文件开头 + offset(一般为正) 为新读写位置 | |
SEEK_CUR:当前读写位置 + offset 为新读写位置 | ||
SEEK_END:文件结尾 + offset(一般为负) 为新读写位置 | ||
函数返回值 | 成功:返回0 | |
失败:返回-1 |
ftell函数
所需头文件 | #include<stdio.h> |
函数原型 | long int ftell(FILE *stream) |
函数传入值 | stream:指向 FILE 对象的指针 |
函数返回值 | 成功:返回标识的当前位置 |
失败:返回-1 | |
备注 | 用于取得当前的文件位置,调用成功则返回当前文件读写位置,若出错则为-1 |
rewind函数
所需头文件 | #include<stdio.h> |
函数原型 | void rewind(FILE *stream) |
函数传入值 | stream:指向 FILE 对象的指针 |
函数返回值 | 无 |
备注 | 用于设定流的文件位置指示为文件开始,该函数调用成功无返回值 rewind()等价于fseek(stream, 0, SEEK_SET) |
麦克风的赞助商(头文件)
本届FX乐曲时代所有参赛选手所使用的麦克风具有以下赞助商提供
#include<stdio.h> //没有我,你们什么歌都唱不出来
如果觉得这篇文章还不错的话,就点个赞收藏一下,感谢您的观看
看完标准I/O操作,不妨再来看看底层I/O操作吧!
文件底层I/O基本操作——东写西读南开北关中位移_莫韵乐的Linux英雄传
如何科学养一只鸽子为你飞鸽传书——程序间异步通信_莫韵乐的Linux英雄传