文章目录
1,打开流fopen()
下列函数可用于打开一个标准I/O流:
FILE *fopen (const char *path, const char *mode);
- 成功时返回流指针; 出错时返回NULL
mode参数
参数 | 含义 |
---|---|
"r"或"rb" | 以只读方式打开文件, 文件必须存在。 |
"r+"或"r+b" | 以读写方式打开文件, 文件必须存在。 |
"w"或"wb" | 以只写方式打开文件, 若文件存在则文件长度清为0。 若文件 不存在则创建。 |
"w+"或"w+b" | 以读写方式打开文件, 其他同”w”。 |
"a"或"ab" | 以只写方式打开文件, 若文件不存在则创建; 向文件写入的数 据被追加到文件末尾。 |
"a+"或"a+b" | 以读写方式打开文件。 其他同”a” |
当给定”b”参数时, 表示以二进制方式打开文件, 但Linux下忽略该参数
fopen示例
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(“test.txt”, “r+”)) == NULL)
{
printf(“fopen error\n”);
return -1;
}
return 0;
}
2,fopen()新建文件权限
- fopen() 创建的文件访问权限是0666(rw-rw-rw-)
- Linux系统中umask设定会影响文件的访问权限, 其规则为(0666 & ~umask)
- 用户可以通过umask函数修改相关设定
3,处理错误信息errno,perror(),strerror()
extern int errno;
void perror(const char *s);
char *strerror(int errno);
- errno 存放错误号
- perror先输出字符串s, 再输出错误号对应的错误信息
- strerror根据错误号返回对应的错误信息
处理错误信息 示例一perror()
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(“test.txt”, “r+”)) == NULL) {
perror(“fopen”);
return -1;
}
fopen: No such file or directory
处理错误信息 示例二strerror(),errno
#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;
}
fopen: No such file or directory
4,关闭流fclose()
int fclose(FILE *stream);
- fclose()调用成功返回0, 失败返回EOF, 并设置errno
- 流关闭时自动刷新缓冲中的数据并释放缓冲区
- 当一个程序正常终止时, 所有打开的流都会被关闭。
- 流一旦关闭后就不能执行任何操作