文章目录
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
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(“test.txt”, “r+”)) == NULL)
{
printf(“fopen error
”);
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
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
#include
#include
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(“test.txt”, “r+”)) == NULL) {
printf(“fopen: %s
”, strerror(errno));
return -1;
}
fopen: No such file or directory
4,关闭流fclose()
int fclose(FILE *stream);
- fclose()调用成功返回0, 失败返回EOF, 并设置errno
- 流关闭时自动刷新缓冲中的数据并释放缓冲区
- 当一个程序正常终止时, 所有打开的流都会被关闭。
- 流一旦关闭后就不能执行任何操作