文章目录
- 前言
- 标准I/O相关函数
- 1、fopen函数:打开文件流
- 2、fclose函数:关闭文件流
- 3、fgetc函数:从流中读取一个字符
- 4、fputc函数:向流中输入一个字符
- 5、fgets函数:从流中读取一个字符串
- 6、fputs函数:向流中输入一个字符串
- 7、fread函数:从流中读取指定大小和数目的字符串
- 8、fwrite函数:向流中输入指定大小和数目的字符串
- 9、fseek函数:改变文件读写位置
- 10、ftell函数:读取当前读写位置
- 11、fflush函数:将缓存区的数据写入文件
- 12、sscanf函数:把左侧字符串的内容以format的格式传输到右侧变量中(从左到右)
- 13、sprintf函数:把右侧变量的内容以format的格式传输到左侧字符串中(从右到左)
- 总结
前言
1、标准I/O的核心对象是流,通常我们使用FILE结构体来描述,该结构体有些复杂,但他主要包含有两个内容,一个是文件描述符fd,一个是缓冲区buf;
2、提到缓冲区就不得不提缓冲类型,缓冲类型分为三种:
(1)全缓冲:对于普通文件,默认使用全缓冲,只有当缓冲区满和flush函数才会对磁盘操作(在之后函数中我会解释);
(2)行缓冲:标准输入/输出流都是行缓冲,遇到’/n’才会执行I/O操作;
(3)无缓冲:暂时用不到
标准I/O相关函数
1、fopen函数:打开文件流
#include<stdio.h>
FILE *fopen(const char *path,const char *mode);//函数原型,看不懂给你举个栗子
例子:
FILE *fp;
fp=open("myfile",r);
以下所有函数头文件都是stdio.h
函数参数(后面能看懂的我就不写了):
1、path将要打开的文件的路径
2、mode文件打开方式:
(1)“r” 只读方式打开
(2)“w” 只写方式打开,如果文件不存在,会新建,存在就清空
(3)“r+” 可读可写方式打开,不清空,也不新建
(4)“w+” 可读可写方式打开,清空,新建
(5)“a+” 可读可写方式打开, 追加输入的方式,不清空,新建
2、fclose函数:关闭文件流
int fclose(FILE *stream);
例子:
fclose(fp);
3、fgetc函数:从流中读取一个字符
int fgetc(FILE *stream);
例子:
char ch=fgetc(fp);
4、fputc函数:向流中输入一个字符
int fputc(int c,FILE *stream);
例子:
char ch='a';
fputc(ch,fp);
5、fgets函数:从流中读取一个字符串
char *fgets(char *s,int size,FILE *stream);
例子:
char buf[10];
fgets(buf,sizeof(buf),fp);
6、fputs函数:向流中输入一个字符串
int *fputs(const char *s,FILE *stream);
例子:
char buf[]={"hello world!"};
fputs(buf,fp);
7、fread函数:从流中读取指定大小和数目的字符串
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
例子:
char buf[100]={0};
fread(buf,sizeof(char),100,fp);
函数参数:
1、ptr 缓存区的首地址,该缓存区自己创建,不是FILE结构体中的缓存区
2、size 读取每个数据的字节数
3、nmemb 读取数据的个数
4、stream FILE结构体变量指针
8、fwrite函数:向流中输入指定大小和数目的字符串
size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
例子:
char buf[100]={"hello world!"};
fwrite(buf,sizeof(char),100,fp);
9、fseek函数:改变文件读写位置
int fseek(FILE *stream,long offset,int whence);
例子:
fseek(fp,100,SEEK_SET);//将读写位置从文件头向后移100个字节
函数参数:
1、stream 见上文
2、offset 偏移量 正数表示读写位置向后移动多少字节,负数表示向前
3、whence 基准值
(1)SEEK_END 文件尾
(2)SEEK_SET 文件头
(3)SEKK_CUR 文件当前位置
10、ftell函数:读取当前读写位置
long ftell(FILE *stream)
例子:
long set=ftell(fp);//得到当前读写位置
11、fflush函数:将缓存区的数据写入文件
int fflush(FILE *stream)
例子:
fflush(fp);
12、sscanf函数:把左侧字符串的内容以format的格式传输到右侧变量中(从左到右)
int sscanf(char *buf,const char *format,...);
例子:
#include<stdio.h>
int main()
{
int n;
char str[100] = "123";
sscanf(str, "%d", &n);
printf("%d\n", n);
return 0;
}
结果展示:
13、sprintf函数:把右侧变量的内容以format的格式传输到左侧字符串中(从右到左)
int sprintf(char *buf,const char *format,...);
总结
1、标准I/O是来自于Linux操作系统中的C库,它的特点是具有缓冲区机制。
2、实际上Linux系统本身也具有对文件进行操作的函数,叫做文件I/O,它可以直接读写实际的文件,甚至还可以访问设备文件和管道文件。