标准IO

一、什么是标准IO

1.概念

标准IO:是在C库中定义的一组专门用于输入输出的函数。

2.特点

(1)通过缓冲机制减少系统调用,提高效率。

        系统调用:是内核向上提供的一组接口

 (2) 围绕流进行操作,流用FILE *来描述

(3) 标准IO默认打开三个流,stdin(标准输入) stdout(标准输出) stderr(标准错误)

二、缓存

(1) 全缓存:和文件相关的

(2) 行缓存:和终端相关的

(3) 不缓存:没有缓存,标准错误。

刷新标准输出缓存区的条件:

● \n

● 程序正常退出

● 缓存区满

● 强制刷新:fflush(NULL)

综上:当我们每次要打印数据时,并不是将数据直接发送给标准输出设备,也就是并直接发送给显示器,而是将要打印的数据先存放到缓存区,当缓冲存数据满时,或者遇到\n,或者程序结束时,或者手动刷新缓存区时,缓冲区才会把数据传输到标准输出设备中,也就是显示器中进行输出。

计算标准输出的缓存区大小

方法一:利用循环打印展示

方法二:利用结构体指针stdout

三、函数接口

1.打开关闭文件 fopen   fclose

打开文件:

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

功能:打开文件

参数:

        path:打开的文件路径

        mode:打开的方式

                r:只读,当文件不存在时报错,文件流定位到文件开头

                r+:可读可写,当文件不存在时报错,文件流定位到文件开头

                w:只写,文件不存在创建,存在则清空,文件流定位到文件开头

                w+:可读可写,文件不存在创建,存在则清空,文件流定位到文件开头

                a:追加(在末尾写),文件不存在创建,存在追加,文件流定位到文件末尾

                a+:读和追加,文件不存在创建,存在追加,读文件流定位到文件开头,写文件流定位

                        到文件末尾

注:当a+的方式打开文件时,写只能在末尾进行追加,定位操作是无法改变写的位置,但是可以改变读的位置

返回值:

            成功:文件流

            失败:NULL,并且会设置错误码

关闭文件:

int fclose(FILE* stream);

功能:关闭文件

参数:stream:文件流

2.文件读写

(1)每次读写一个字符:fgetc()fputc()

每次读一个字符 fgetc()

int fgetc( FILE * stream);

功能:从文件中读取一个字符,并将当前文件指针位置向后移动一个字符。

参数:stream:文件流

返回值:成功:读到的字符

失败或读到文件末尾:EOF(-1)

每次写一个字符 fputc()

int fputc( int c, FILE * stream);

功能:向文件中写入一个字符, 成功写入后文件指针会自动向后移动一个 字节位置。

参数:c:要写的字符

stream:文件流

返回值:成功:写的字符的ASCII

失败:EOF(-1)

(2)每次一串字符的读写 fgets()fputs()

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

功能:从文件中每次读取一行字符串

参数: s:存放字符串的地址

        size:期望一次读取的字符个数

        stream:文件流

返回值:成功:s的地址

               失败或读到文件末尾:NULL

特性:每次实际读取的字符个数为 size-1个,会在末尾自动添加 \0

每次读一行,遇到 \n 或者到达文件末尾后不再继续读下一行

并把它存储在 s所指向的字符串内。

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

功能:向文件中写字符串

参数:s:要写的内容

        stream:文件流

返回值:成功:非负整数

             失败:EOF

(3)二进制读写

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

功能:从文件流读取多个元素(将二进制数据从文件读出)

参数: ptr :是一个指针,是存放数据的存储空间的起始地址,用来存放读取元素

        size :元素大小 sizeof(元素数据类型)

        nmemb :读取元素的个数

        stream :要读取的文件流

返回值:成功:读取的元素的个数

                读到文件尾或失败: 0

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

功能:将二进制数据写入文件

参数: ptr :是一个指针,保存要输出数据的空间的地址。

size :要写入的字节数 sizeof(数据类型)

nmemb : 要进行写入元素的个数

strem: 目标文件流指针

返回值:成功:写的元素个数

失败 :-1

(4)重定向流到指定文件 freopen

FILE *freopen( const char *pathname, const char *mode, FILE * fp);

功能:将指定的文件流重定向到打开的文件中

参数:path:文件路径

        mode:打开文件的方式(同fopen)

        fp:文件流指针

返回值:成功:返回文件流指针

              失败:NULL

(5)文件定位操作

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不起作用

补充:其中SEEK_SET, SEEK_CUR和 SEEK_END 和依次为 0,1和 2.

long ftell(FILE *stream);

功能:获取当前的文件位置

参数:要检测的文件流

返回值:成功:当前的文件位置,出错:-1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值