文件IO常用api
文件IO常用api
打开/关闭文件
fopen
该api用于打开指定的文件
FILE *fopen (const char *__restrict __filename,const char *__restrict __modes)
const char *__restrict __filename:表示要打开的文件和路径
const char *__restrict __modes:表示要访问模式
return:结构体指针 表示一个文件
常用访问模式如下:
1、"r":只读模式,若文件不存在则打开失败
2、"w":只写模式,若文件存在则会清空并写入文件,若不存在则会创建新文件
3、"a":只追加写模式,若文件存在则从文件末尾继续写入文件,若不存在则会创建新文件
4、"r+":读写模式,文件必须存在,该模式下可以读入和写出文件
5、"w+":读写模式,可读取写入文件,若不存在则会创建新文件
6、"a+":读写追加模式,可读取文件,写入文件从文件末尾开始,若不存在则会创建新文件
例:
char *Filename = "test.txt";
File *iofile = fopen(Filename,"r");
fclose
该api用于在程序结束时关闭已经打开的文件
int fclose (FILE *__stream)
FILE *__stream:需要关闭的文件
return:成功返回0,失败返回EOF(-1)
例:
int Close_Result = fclose(iofile);
if (Close_Result == -1) {
perror("fclose");
exit(EXIT_FAILURE);
}
向文件中写入数据
fputc
该api用于向文件中写入一个字符
int fputc (int __c, FILE *__stream);
int __c: ASCII码对应的char
FILE *__stream:打开的一个文件
return:成功返回的char 失败返回EOF
例:
int Result = fputc(48,iofile);
if (Result == EOF) {
perror("fputc");
exit(EXIT_FAILURE);
}
fputs
该api用于向文件中写入一个字符串
int fputs (const char *__restrict __s, FILE *__restrict __stream)
char *__restrict __s: 需要写入的字符串
FILE *__restrict __stream: 要写入的文件,写在哪里取决于访问模式
return: 成功返回非负整数(一般是 0,1) 失败返回 EOF
例:
char *example = "Hello World!";
int Result = fputs(example,iofile);
if (Result == EOF) {
perror("fputs");
exit(EXIT_FAILURE);
}
fprintf
该api用于向文件写入指定的内容
fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
FILE *__restrict __stream: 要写入的文件,写在哪里取决于访问模式
char *__restrict __fmt: 要写入的内容,可以包含占位符用于输出指定内容
...: 若*__restrict __fmt中使用了占位符,需要写入对应的变量
return: 成功返回正整数(写入字符总数不包含换行符) 失败返回 EOF
例:
int years = 18;
int Result = fprintf(iofile,"我今年%d岁了\n",years);
if (Result == EOF) {
perror("fputs");
exit(EXIT_FAILURE);
}
从文件中读取数据
fgetc
该api用于从文件中读取一个字符
int fgetc (FILE *__stream)
FILE *__stream: 需要读取的文件
return: 读取的一个字节 到文件结尾或出错返回 EOF
例:
int Result = fgetc(iofile);
if (Result == EOF) {
perror("fgetc");
exit(EXIT_FAILURE);
}
fgets
该api用于从文件中读取一个字符串
fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
char *__restrict __s: 接收读取的数据字符串
int __n: 能够接收数据的长度
FILE *__restrict __stream: 需要读取的文件
return: 成功返回字符串 失败返回 NULL(可以直接用于 while)
例:
char buf[100] = {0};
while(fgets(buf,sizeof(buf),iofile) != NULL) {
printf("%s",buf);
}
fscanf
该api用于从文件中读取变量等数据
int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...)
FILE *__restrict __stream: 读取的文件
char *__restrict __format: 读取的匹配表达式
...: 变长参数列表 用于接收匹配的数据
return: 成功返回参数的个数 失败返回 0 报错或结束返回 EOF
例:
int a,b;
int Result = fscanf(iofile,"%d%d",&a,&b);
if (Result == EOF) {
perror("fgetc");
exit(EXIT_FAILURE);
}
else {
printf("%d + %d = %d\n",a,b,a+b);
}
标准输入/输出/错误
stdin
该api用于从控制台读取数据
例:
fgets(buf,sizeof(100),stdin);
stdout
该api用于向控制台输出数据
例:
fputs(buf,stdout);
stderr
该api一般用于输出错误日志
例:
fputs(buf,stderr);
系统调用
open
该api用于打开一个标准的文件描述符
int open (const char *__file, int __oflag, ...)
const char *__file:表示要获取描述符的文件
int __oflag:用于指定打开文件的模式
...:额外参数,例如当使用O_CREAT模式时,需要使用二进制传入创建文件的权限参数,例如0666
return:成功时返回该文件的文件描述符,失败返回EOF
常用的打开模式如下:
1、O_RDONLY:以只读模式打开
2、O_WRONLY:以只写模式打开
3、O_RDWR:以读写模式打开
4、O_CREAT:如果文件不存在,则创建一个新文件
5、O_APPEND:将所有写入操作追加到文件的末尾
例:
int FD = open(iofile,O_RDWR | O_CREATE,0666);
read
该api用于读取已经打开的文件描述符
ssize_t read (int __fd, void *__buf, size_t __nbytes)
int __fd:一个整数,表示要从中读取数据的文件描述符
void *__buf:一个指向缓冲区的指针,读取的数据将会被储存在这个缓冲区
size_t __nbytes:一个size_t类型的整数,表示要读取字节的最大数,实际读取的字节数可能达不到申请的最大值
return:成功时返回读取到的字节数,失败时返回EOF
例:
ssize_t Result = read(FD,buf,sizeof(buf));
if (Result == EOF) {
perror("read");
exit(EXIT_FAILURE);
}
write
该api用于对已经打开的文件描述符写入内容
ssize_t write (int __fd, const void *__buf, size_t __n)
int __fd:一个整数,表示要写入数据的文件描述符
const void *__buf:一个指向缓冲区的指针,要写入的数据需要先存放在这个缓冲区中
size_t __n:一个size_t类型的整数,表示写入数据的字节数
return:成功时返回写入的字节数,失败时返回EOF
例:
ssize_t Result = write(FD,buf,sizeof(buf));
if (Result == EOF) {
perror("write");
exit(EXIT_FAILURE);
}
close
该api用于在程序结尾时关闭对文件描述符的引用
int close (int __fd)
int __fd:一个整数,表示要关闭的文件描述符
return:成功时返回0,失败时返回EOF
例:
int Result = close(FD);
if (Result == EOF) {
perror("close");
exit(EXIT_FAILURE);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律