c标准语言库里的i o函数,C语言文件I/O和标准I/O函数
读取/写入 相对于文件而言
输入/输出 相对于程序/内存而言
一切皆文件,键盘、显示屏也是文件,只不过是特殊的标准文件;
标准文件:标准输入、标准输出、标准错误;---->对应的文件指针:stdin、stdout、stderr;--->键盘、显示器
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二进制与文本:
大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。)
参考链接:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
标准I/O的机理:
研究一个典型的概念模型,分析标准I/O的工作原理。
调用fopen()打开文件(C程序会自动打开3中标准文件)。fopen()函数不仅打开一个文件,还创建了一个缓冲区(读写模式下会创建两个缓冲区)以及一个包含文件和缓冲区数据的结构。fopen()返回一个指向该结构的指针,以便其他函数知道如何找到该结构。
假设如果把该指针赋给一个指针变量fp,我们说fopen()函数“打开一个流”。如果以文本的形式打开该文件,就获得一个文本流。如果以二进制形式打开该文件,就获得一个二进制流。
这个结构通常包含一个指定流中当前位置的文件位置指示器。除此之外,它还包含错误和文件结尾指示器、一个指向缓冲区开始处的指针、一个文件标识符、一个计数(实际拷贝进缓冲区的字节数)。
第二步就是调用定义在stdio.h中的输入函数,文件中的数据块就被拷贝到缓冲区中。缓冲区的大小因实现而异。一般是512字节或是它的倍数。除了填充缓冲区外,这些输入函数还要设置fp所指向的结构中的值。尤其是设置流中的当前位置和拷贝进缓冲区的字节数。这个步骤叫做初始化结构和缓冲区。
之后按要求从缓冲区读取数据。在它读取数据时,文件位置指示器被设置为指向刚读取字符的下一个字符。由于stdio.h系列的所有输入函数都使用相同的缓冲区,所以调用任何一个函数都将从上一次函数停止调用的位置开始。
当输入函数发现已经读完缓冲区中的所有字符时,会请求把下一个缓冲区大小的数据块从文件拷贝到该缓冲区中。以这种方式,输入函数可以读取文件中所有的内容,直到文件结尾。函数在读取缓冲区中的最后一个字符后,把结尾指示器设置为真。于是,下一次被调用的输入函数将返回EOF。
输出函数以类似的方式把数据写入缓冲区。当缓冲区被填满时,数据将被拷贝至文件中。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
何为文件指针:
在C语言中使用一个指针变量指向一个文件,这个指针被称为文件指针。
定义一个文件指针: FILE *指针变量标识符
FILE应该为大写,它实际上是系统定义的一个结构。编写程序时,不必关系结构的实现细节。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
标准I/O函数总览:
fopen()函数:打开文件;(文件)
fclose()函数:关闭文件;(文件)
getc()函数:从指定文件读取一个字符;(字符)
putc()函数:写入一个字符到指定文件;(字符)
getchar()函数:从标准输入文件读取一个字符;(字符)
putchar()函数:写入一个字符到标准输入文件;(字符)
fprintf()函数:写入到指定文件,输出到文件、带转换说明;(字符串)
fscanf()函数:从指定文件读取,输入到程序、带转换说明;(字符串)
printf()函数:写入到标准输出文件,输出到标准输出文件,带转换说明;(字符串)
scanf()函数:从标准输入文件读取,从标准输入文件输入到程序,带转换说明;(字符串)
fgets()函数:从指定文件读取字符串,带字符串大小参数;(字符串)
fputs()函数:写入字符串到指定文件,带字符串大小参数;(字符串)
gets()函数:这个函数不安全,容易造成内存溢出,被摒弃了;(字符串)
puts()函数:写入字符串到标准输出设备,输出字符串到标准输出设备;(字符串)
fseek()函数:设置文件指针stream的位置;(文件)
ftell()函数:得到文件位置指针当前位置相对于文件首的偏移字节数;(文件)
fsetpos()函数:设置文件指针stream的位置,对于大文件;(文件)
fgetpos()函数:得到文件位置指针当前位置相对于文件首的偏移字节数,对于大文件;(文件)
fread()函数:二进制方式,从一个文件读数据到另一文件;(二进制)
fwrite()函数:二进制方式,从一个文件写输入到另一个文件;(二进制)
exit()函数:退出程序,返回操作系统用的。exit(0)表示正常退出,exit(x)(x不为0)都表示异常退出,这个x是返回给操作系统(包括UNIX,Linux,和MS DOS)的,以供其他程序使用。
rewind()函数:void rewind(FILE * stream);用于将文件指针重新指向文件的开头。
setvbuf()函数:创建了一个供标准I/O函数替换使用的缓冲区。
fflush()函数:引起输出缓冲区所有未写入的数据被发送到fp指定的输出文件。这个过程被称为刷新缓冲区。(针对输出流)
feof()函数:表明是否是文件结尾,0代表是文件结尾;(文件)
ferror()函数:表明是否读写错误,0代表正确读写;(文件)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数
函数原型
参数说明
返回值
说明
c标准语言库里的i o函数,C语言文件I/O和标准I/O函数相关推荐
- c语言全文件操作函数,C语言文件操作函数大全
C语言 文件操作函数大全 C语言文件操作函数 2007-10-17 19:21 13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制 ...
- c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...
清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...
- php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例
搜索热词 @H_404_0@本文实例讲述了PHP单文件上传原理及上传函数的封装操作.分享给大家供大家参考,具体如下: @H_404_0@表单: @H_404_0@0.PHP: 无标题文档 请选择您要上 ...
- c语言getchar函数_C语言中带有示例的getchar()函数
c语言getchar函数 C语言中的getchar()函数 (getchar() function in C) The getchar() function is defined in the < ...
- c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...
- php中upload函数,PHP中文件的上传和下载常用函数
文件的上传 1.html标签需要做的上传设置 1) form标签属性设置 1>method设置为post 2>enctype设置为multipart/form-data 3>form ...
- C语言文件有关的基本知识,以及函数打开与关闭文件!
" 要成为绝世高手,并非一朝一夕,除非是天生武学奇才.但是这种人-万中无一 " -- 包租婆 ● C语言文件有关的基本知识 01 什么是文件 1.文件有不同的类型,在程序设计中, ...
- 整数阶贝塞尔函数c语言,整数阶复宗量变形贝塞尔函数的计算
整数阶复宗量变形贝塞尔函数的计算 根据整数阶复宗量变形贝塞尔函数模值随阶数n的变化趋势 ,给出了其数值计算 (本文共4页) 阅读全文>> 鉴于目前的算法程序集中没有现成的计算复宗量贝塞尔函 ...
- c语言读取文件函数,C语言文件操作详细分析:读取文件(fread函数使用)
C语言文件操作详细分析:读取文件(fread函数使用) 这里详细介绍了C语言读取文件的函数fread的使用说明,参照了MSDN的说明,同时加入自己的经验让大家学的更加明白. C语言读取文件函数frea ...
- c语言创建一个文件函数,c语言文件读写函数 用C语言的函数创建、打开和读写文件...
C语言文件读写结构体里面的数据怎样存到磁盘文件上 c语言对同一个文件进行读写(r+) 编写程序,将文本文件c.txt中的所有小写字母转换成相应的大写字母,其他一.标准文件的读写 1.文件的打开 fop ...
最新文章
- 北理工硕士被指抄袭投稿论文,校方通报:留校察看
- formal method lecture 2: propositional logic
- 武侠q传服务器维护,《武侠Q传》就服务器人多过载致歉玩家赞有诚意
- MinGW 使用 msvcr90.dll
- javascript中substring()、substr()、slice()的区别
- Hbase单点安装Version1.1.5
- UVA10852 Less Prime【筛选法】
- 在网页中使用超链接来打开本地应用(可传参数)
- 应用编辑器保存的htnl代码怎么正常显示在页面上
- 稀疏表示的合适字典_基于共振稀疏分解的滚动轴承早期微弱故障诊断
- html网页对账单样式,怎样在EXCEL中做工行对账单,样式字体要...
- roseha 11 用VM虚拟机创建集群测试
- php短信不同账号发,php用不同平台批量发短信
- 最新计算机cpu简介,电脑处理器性能排行榜 cpu天梯图介绍
- 理解计算机如何开平方 二分法收敛 Excel演示
- 适配器模式 个人理解+JAVA 小例子
- systemTap的安装(设备端,交叉编译工具链)
- 图神经网络学习(一)
- 先说说什么是主数据和参考数据?
- C语言操作SQLite3简明教程
热门文章
- HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)
- 从源码解析kube-scheduler默认的配置
- Json API接口数据生成
- c# 用BitArray来管理包含关系
- [转]Linq查询DataTable,DataRow
- 知乎十万级容器规模的Java分布式镜像仓库实践
- Linux基本信息查看命令
- 开发板ping不通Linux虚拟机的原因及解决办法
- evolving checkers players [Fogel and Chellapilla, 2002]
- java 邮箱模板_Java:Spring同时集成JPA与Mybatis