提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、打开流
下列函数可用于打开一个标准I/O流:
函数代码如下:
FILE *fopen(const char *path,const char *mode);
以上函数成功时返回流指针(即结构体指针),出错时返回NULL
二、fopen-参数path
path可以是当前路径下的文件名,也可以是绝对文件路径。
三、fopen-参数mode
示例程序如下:
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp
if(fp fopen("test.txt","r") == NULL)
{
printf("fopen error\n");
return -1;
}
else
{
printf("fopen success\n")
return 0;
}
}
Ø fopen() 创建的文件访问权限是0666(rw-rw-rw-)
Ø Linux系统中umask设定会影响文件的访问权限,其规则
为(0666 & ~umask)
Ø 用户可以通过umask函数修改相关设定
Ø 如果希望umask不影响文件访问权限,该如何设定?
1.处理错误信息-perror库函数
perror库函数需要 头文件stdio.h
perror先输出字符串s,再输出错误号对应的错误信息
代码如下(示例):
#include <stdio.h>
int main(int argc ,char *argv[])
{
FILE *fp
if(fp = fopen("test.txt","r+") == NULL)
perror("fopen");
return -1;
}
else{
printf("fopen success\n")
}
2.处理错误信息-strerror库函数
strerror库函数需要 系统变量erron、头文件string.h
erron系统变量需要需要头文件errno.h
strerror根据错误号返回对应的错误信息
代码如下(示例):
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc ,char *argv[])
{
FILE *fp
if(fp = fopen("test.txt","r+") == NULL)
printf("fopen:%s\n",strerror(errno));
return -1;
}
else{
printf("fopen success\n")
}
四、关闭流
int fclose(FILE *stream)
举例子代码如下:
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc ,char *argv[])
{
FILE *fp
int fpret
if(fp = fopen("test.txt","r+") == NULL)
printf("fopen:%s\n",strerror(errno));
return -1;
}
else{
printf("fopen success\n")
fpret = fclose(fp)
if(fpret==0)
{
printf("fclose success\n")
}
else
{
perror("fclose")
}
}
fclose()函数的入参stream必须保证为非空,否则出现断错误。
Øfclose()调用成功返回0,失败返回EOF(即-1),并设置errno
Ø流关闭时自动刷新缓冲中的数据并释放缓冲区。比如:常规文件把缓冲区内容写入磁盘
Ø当一个程序正常终止时,所有打开的流都会被关闭
Ø流一旦关闭后就不能执行任何操作