C库-标准IO

发布于:2025-07-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

标准IO常用到的函数

1.打开文件:使用fopen()函数打开文件。
2.关闭文件:使用fclose()函数关闭文件。
3.读取文件:使用fread()、 fgets()、fscanf()等函数读取文件。

4.写入文件:使用fwrite() 、 fprintf() 、fputc()等函数写入文件。
5.定位文件位置:使用fseek()函数移动文件位置指针。
6.检查文件状态:使用feof()、ferror()等函数检查文件状态。

fopen函数:

函数原型:

FILE *fopen(const char *pathname, const char *mode);

参数说明:

文件模式是在打开文件时指定的也就是
“r”:只读模式,文件必须存在。
“w”:写入模式,如果文件不存在则创建新文件,如果存在则覆盖原有文件。
“a”:追加模式,如果文件不存在则创建新文件,在文件末尾追加数据。

“r+”、“w+”、“a+”:读写模式,允许读取和追加读写。
“rb”、“wb”、“ab”:二进制模式,与上述模式类似,用于处理二进制文件与字。(Linux中忽略)

 返回值

成功返回文件流指针, 失败返回 NULL, errno 会被设置

 fclose

函数原型

int fclose(FILE *stream);

用来关闭打开的文件

fwrite函数

函数原型:

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

通过文件流指针往文件中写入数据, 以块为单位

参数说明:

Ptr: 写入的内容的内存地址
Size: 每一块数据的大小
Nmemb: 有多少块数据
Stream: 写入哪个文件的文件流指针


返回值:

成功则返回写入多少块数据(一定是你要求写入多少块, 他就返回多少块), 如果
返回值不等于要求写入的块数, 证明写入失败, 写入失败可以用 ferror 来判断


fread:

函数原型:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数说明:

Ptr: 读取到的内容存放的内存地址
Size: 每一块数据的大小
Nmemb: 有多少块数据
Stream: 读取哪个文件的文件流指针


返回值:

成功则返回读取多少块数据, 如果返回值不等于要求读取的块数, 证明要么写入失败, 要么则读到文件的末尾, 读取失败可以用 ferror 来判断读取到文件的末尾可以用 feof来判断。 

注意 

如果读取到末尾, 末尾的数据不足一块数据的大小的时候, 它是有把他读取出来的, 只是返回值不会这个读取出来的内容当做是一块数据, 会把他计算成为 0 块数据

feof

函数原型:

  int feof(FILE *stream);//查看文件是否在末尾

返回值:

如果文件结束,则返回非0值,否则返回0

ferror

函数原型:

 int ferror(FILE *stream);/用来检查参数 stream 所指定的文件流是否发生了错误情况,

返回值:

没有错误发生返回0值
如果文件流有错误发生则返回非0值.

fflush

 如上图所示主要用于刷新缓冲区,当调用fflush时从缓冲区存到硬盘中

函数原型:

int fflush(FILE *stream)

返回值:

  • 如果成功刷新缓冲区,fflush() 返回 0。

  • 如果发生错误,返回 EOF,并且设置错误标识符(ferror)。

get系列

函数原型

#include <stdio.h>

       int fgetc(FILE *stream);

       char *fgets(char *s, int size, FILE *stream);

       int getc(FILE *stream);

       int getchar(void);

       int ungetc(int c, FILE *stream);

 函数说明

fgetc:从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。

getchar :从键盘获取一个字符 fgetc(stdin) == getchar();

fgets:获取一行,遇到换行符停止  

ungetc:将字符扔到缓冲区 int ungetc(int char, FILE *stream)

注意 

fgets() 和 gets() 都是按行读取文件数据,他们的区别是:

  • fgets() 可以读取指定的任意文件,而 gets() 只能从键盘读取。
  • fgets() 有内存边界判断,而 gets() 没有,因此后者是不安全的,不建议使用。
  • fgets() 在任何情形下都按原样读取数据,但 gets() 会自动去除数据末尾的 ‘\n’

put系列

函数原型

 #include <stdio.h>

       int fputc(int c, FILE *stream);

       int fputs(const char *s, FILE *stream);

       int putc(int c, FILE *stream);

       int putchar(int c);

       int puts(const char *s);

注意

fputs() 和 puts() 都是按行将数据写入文件,他们的区别是:

  • fputs() 可以将数据写入指定的任意文件,而 puts() 只能将数据输出到屏幕。
  • fputs() 在任何情形下都按原样写入数据,但 puts() 会自动给写入数据的末尾加上 ‘\n’

printf系列

fprintf:打印到文件中

fdprintf:打印到文件描述符中

sprintf:打印到数组中(指定的内存)

安全版本:snprintf->可以指定长度,指定最大长度

scanf系列(空格和\n是数据的分割符号)

fscanf:从文件中格式化获取对应的数据,可以进行格式转化

sscanf:从一块内存中格式化获取数据


文件操作的注意事项


1.错误处理:在打开文件时,应该检查返回的文件指针是否为NULL ,这表明文件打开失败。
2.资源管理:在完成文件操作后,务必使用fclose() 函数关闭文件,以释放资源。
3.缓冲区管理:文件操作通常涉及缓冲区,因此在关闭文件之前,系统会自动刷新缓冲区以确保所有数据都被写入磁盘。
4.文件路径:在不同的操作系统上,文件路径可能有所不同,注意跨平台兼容性。


网站公告

今日签到

点亮在社区的每一天
去签到