- day1
- 一、标准IO
- 1.概念
- 在C库中定义的一组用于输入输出的函数
- 2.特点
- (1).通过缓冲机制减少系统调用,提高效率
-
- (2.)围绕流进行操作,流用FILE *来描述
- (3).标准IO默认打开了三个流,stdin(标准输入)、stdout(标准输出)、stderr(标准错误)
- (4).一般操作普通文件
- (1).通过缓冲机制减少系统调用,提高效率
- 3.缓冲区
- (1).全缓冲:与文件相关
- 缓冲区刷新条件:
- 程序正常退出:return(main) exit
- 缓冲区溢出
- 强制刷新fflush
- fclose关闭对应的流
- (2).行缓冲:与终端相关
- 缓冲区刷新条件:
- \n
- 程序正常退出:return(main) exit
- 缓冲区溢出
- 强制刷新fflush
- fclose关闭对应的流
- (3).不缓冲:没有缓冲区,标准错误
- 计算缓冲区大小(1kb)
-
- 4.函数接口
- 4.1打开文件fopen
- FILE *fopen(const char *path, const char *mode)
- 功能:打开文件
- 参数:path:打开的文件 mode:打开的方式 r:只读,当文件不存在时报错,文件流定位到文件开头 r+:可读可写,当文件不存在时报错,文件流定位到文件开头 w:只写,文件不存在创建,存在清空 w+:可读可写,文件不存在创建,存在清空 a:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾 a+:读和追加,文件不存在创建,存在追加,读文件流定位到文件开头,写文件流定位到文件末尾
- 注:当a的方式打开文件时,写只能在末尾进行追加,定位操作是无法改变写的位置,但是可以改变读的位置
- 返回值:成功:文件流;失败:NULL,并且会设置错误码。
- 4.2关闭文件 fclose
- int fclose(FILE* stream);
- 功能:关闭文件
- 参数:stream:文件流
-
- 4.3读写操作fread fwrite fgets fputs
- (1).按照字符串读写
- char * fgets(char *s, int size, FILE * stream);
- 功能:从文件中每次读取一行字符串
- 参数:s:存放字符串的地址 size:一次读取的字符个数 stream:文件流
- 返回值:成功:s的地址;失败或读到文件末尾:NULL
- 特性:每次实际读取的字符个数为size-1个,会在末尾自动添加\0 每次读一行,遇到\n后不再继续,读下一行。
- int fputs(const char *s, FILE * stream);
- 功能:向文件中写字符串
- 参数:s:要写的内容 stream:文件流
- 返回值:成功:非负整数;失败:EOF
-
- 练习:通过fgets实现"wc -l 文件名"命令功能(计算文件行数)
-
- (2).按照二进制的方式进行读写:一般操作二进制文件
- size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:从文件流读取多个元素
- 参数:ptr :用来存放读取元素 size :元素大小 sizeof(数据类型) nmemb :读取元素的个数 stream :要读取的文件
- 返回值:成功:读取的元素的个数; 读到文件尾: 0 失败: -1
- size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 功能:按对象写
- 参数:同上
- 返回值:成功:写的元素个数;失败 :-1
-
- (1).按照字符串读写
- 4.4文件定位操作
- void rewind(FILE *stream);
- 功能:将文件位置指针定位到起始位置 int fseek(FILE *stream, long offset, int whence);
- 功能:文件的定位操作
- 参数:stream:文件流 offset:偏移量:正数表示向后文件尾部偏移,负数表示向文件开头偏移 whence:相对位置: SEEK_SET:相对于文件开头 SEEK_CUR:相对于文件当前位置 SEEK_END:相对于文件末尾
- 返回值:成功:0;失败:-1
- 注:当打开文件的方式为a或a+时,fseek不起作用
- long ftell(FILE *stream);
- 功能:获取当前的文件位置
- 参数:要检测的文件流
- 返回值:成功:当前的文件位置,出错:-1
-
- 4.1打开文件fopen
- 1.概念
- 一、标准IO