文件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);
} 
posted @   Tacitle  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示