标准IO库
要使用标准IO库,需要包含头文件 <stdio.h>
。该库为用户创建了一个连接底层系统调用的通用接口,它是ANSI C标准制定的库,因此具有可移植性(文件IO是基于Unix的POSIX标准,不可移植到Windows)。同文件IO类似,它需要先打开一个文件以建立一个访问途径,文件IO的访问途径是通过文件描述符,标准IO的访问途径是流(stream),它被实现为指向结构FILE的指针。
基本操作
1 打开/创建文件流
FILE *fopen(const char *restrict pathname, const char *restrict mode);
第一个参数: 文件的路径
第二个参数:文件打开的模式
返回值: 返回指向文件的指针,指针不为NULL是成功,指针为NULL是失败
文件打开模式:
1. "r" or "rb" : 以只读形式打开文(文件必须存在)
2. "w" or "wb" : 以写方式打开文件并将文件长度截为0或创建一个供写的文件
3. "a" or "ab" : 以写方式打开文件并将内容写到文件末或创建一个文件
4. "r+" or "rb+" or "r+b" : 以更新的方式(读/写)打开文件(文件必须存在)
5. "w+" or "wb+" or "w+b" : 以更新的方式(读/写)打开文件并将文件长度截为0或创建一个文件
6. "a+" or "ab+" or "a+b" : 以更新的方式(读/写)打开文件并将更新内容写到文件末或创建一个文件
2 关闭文件流
int fclose(FILE *stream);
参数:FILE *stream: 指向被关闭文件的指针
返回值:关闭文件成功返回0,关闭文件失败返回而EOF
3 错误处理
标准IO函数执行时出现错误,会把错误码保存在error中,程序员可以通过相应的函数打印错误信息。
#include<stdio.h>
void perror(const char* s);
参数:在标准错误流上输出的信息
返回值:无
代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if((fp = fopen("1.txt","r")) == NULL)
{
perror("fail to fopen");
return -1;
}
fclose(fp);
return 0;
}
文件不存在,则会报下列错误:
4 strerror函数
#include<string.h>
#include<errno.h>
char *strerror(int errnum);
参数:错误码
返回值:错误码对应的错误信息
代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp;
int errno;
if((fp = fopen("1.txt","r")) == NULL)
{
printf("fail to fopen:%s\n",strerror(errno));
return -1;
}
fclose(fp);
return 0;
}
gcc执行结果: