标准I/O的fopen()函数
I/O函数介绍
在linux下的I/O操作是一切实现的基础,主要有标准io和系统调用io(文件io)
stido(标准io):移植性好,优先考虑使用,例如printf,fopen
sysio(系统调用io):每个操作系统都有自己的一套系统调用io
一、fopen()介绍
fopen函数用于打开文件, 其调用格式为:
FILE *fopen(char *filename, *type);
fopen返回一个文件指针(FILE*),通过该指针可以操作该文件,如关闭文件
filename:为文件名;
type:为打开文件的类型,一共有6种类型
type类型表 文件操作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
────────────────────────────
"r" 打开文字文件并定位到第一个字节只读,找不到文件则报错
"r+" 打开一个文字文件并定位到第一个字节读/写,找不到文件则报错
"w" 创建一个文字文件只写,无文件则创建,有文件则清空
"w+" 创建一个文字文件读/写,无文件则创建,有文件则清空
"a" 打开一个文字文件只写, 并定位到结尾
"a+" 打开一个文字文件读写, 并定位到结尾
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
**注意:**
如果fopen失败,返回NULL,同时全局变量errno会赋值为出错原因编号。
errno是一个全局变量,任何语句出现错误都会向erron赋值自己的错误原因编号,
故我们在使用errno是一定要注意出现错误及时打印,防止错误编号被覆盖。
使用全局变量 errno 需要 #include <errno.h>
二、linux的fopen()代码演示
1.例子1
代码如下:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 int main()
5 {
6 FILE *pr;
7 pr=fopen("temp","r");
8 if(pr==NULL)
9 {
10 fprintf(stderr,"fopen is fail,erron=%d\n",errno);
11 exit(1);
12 }
13 fprintf(stdout,"ok");
14 exit(0);
15 }
该函数实现的功能为:打开一个名为temp的文件。如果fopen失败,返回NULL,同时全局变量errno会赋值为出错原因编号。失败则打印出出错原因编号,成功则返回ok。
开始我们并未创建名为temp的文件 则函数结果为
打开失败失并打印出出错原因编号
然后我们创建名为temp的文件再次运行函数
我们可以看到打印出了ok
例子2
我们打印出错误类型时,只能打印出错误编号,这很不利于我们查看错误,所以我们可以对该例子进行改进,使用perror函数
调用perror()函数不需要传入 errno ,函数内部会自己去获取 errno 变量的值,调用此函数会直接将错误提示字符串打印出来,而不是返回字符串,除此之外还可以在输出的错误提示字符串之前加入自己的打印信息。
#include <stdio.h>
void perror(const char *s);
/*/s:在错误提示字符串信息之前,可加入自己的打印信息,也可不加,不加则传入空字符串即可。
返回值:void 无返回值。*/
改进之后代码为
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 int main()
5 {
6 FILE *pr;
7 pr=fopen("temp","r");
8 if(pr==NULL)
9 {
10 perror("fopen()") ;
11 // fprintf(stderr,"fopen is fail,erron=%d\n",errno);
12 exit(1);
13 }
14 fprintf(stdout,"ok");
15 exit(0);
16 }
我们删除玩刚刚创建的temp文件之后运行结果如下
此时已经不在显示错误编号而是显示的错误编号所对应的错误原因
三、fclose()介绍
调用 fclose()库函数可以关闭一个由 fopen() 打开的文件。
函数原型如下
#include <stdio.h>
int fclose(FILE *stream);
参数 stream 为 FILE 类型指针,调用成功返回 0 ;
失败将返回 EOF (也就是 -1 ),
并且会设置 errno 来指示错误原因。
我们在打开一个文件在使用完成之后要及时关闭文件,
防止多次打开同一个文件造成资源浪费。
我们调用fclose关闭文件也非常简单,代码如下所示
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 int main()
5 {
6 FILE *pr;
7 pr=fopen("temp","r");
8 if(pr==NULL)
9 {
10 perror("fopen()") ;
11 // fprintf(stderr,"fopen is fail,erron=%d\n",errno);
12 exit(1);
13 }
14 fprintf(stdout,"ok");
15 fclose(pr);
16 exit(0);
17 }
总结
提示:这里对文章进行总结:
本次程序很简单,如果仍需运行代码,可在代码区自取