读取/写入  相对于文件而言

输入/输出 相对于程序/内存而言

一切皆文件,键盘、显示屏也是文件,只不过是特殊的标准文件;

标准文件:标准输入、标准输出、标准错误;---->对应的文件指针: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函数相关推荐

  1. c语言全文件操作函数,C语言文件操作函数大全

    C语言 文件操作函数大全 C语言文件操作函数 2007-10-17 19:21 13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制 ...

  2. c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...

    清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...

  3. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例

    搜索热词 @H_404_0@本文实例讲述了PHP单文件上传原理及上传函数的封装操作.分享给大家供大家参考,具体如下: @H_404_0@表单: @H_404_0@0.PHP: 无标题文档 请选择您要上 ...

  4. c语言getchar函数_C语言中带有示例的getchar()函数

    c语言getchar函数 C语言中的getchar()函数 (getchar() function in C) The getchar() function is defined in the < ...

  5. c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  6. php中upload函数,PHP中文件的上传和下载常用函数

    文件的上传 1.html标签需要做的上传设置 1) form标签属性设置 1>method设置为post 2>enctype设置为multipart/form-data 3>form ...

  7. C语言文件有关的基本知识,以及函数打开与关闭文件!

    " 要成为绝世高手,并非一朝一夕,除非是天生武学奇才.但是这种人-万中无一 " -- 包租婆 ● C语言文件有关的基本知识 01  什么是文件 1.文件有不同的类型,在程序设计中, ...

  8. 整数阶贝塞尔函数c语言,整数阶复宗量变形贝塞尔函数的计算

    整数阶复宗量变形贝塞尔函数的计算 根据整数阶复宗量变形贝塞尔函数模值随阶数n的变化趋势 ,给出了其数值计算 (本文共4页) 阅读全文>> 鉴于目前的算法程序集中没有现成的计算复宗量贝塞尔函 ...

  9. c语言读取文件函数,C语言文件操作详细分析:读取文件(fread函数使用)

    C语言文件操作详细分析:读取文件(fread函数使用) 这里详细介绍了C语言读取文件的函数fread的使用说明,参照了MSDN的说明,同时加入自己的经验让大家学的更加明白. C语言读取文件函数frea ...

  10. c语言创建一个文件函数,c语言文件读写函数 用C语言的函数创建、打开和读写文件...

    C语言文件读写结构体里面的数据怎样存到磁盘文件上 c语言对同一个文件进行读写(r+) 编写程序,将文本文件c.txt中的所有小写字母转换成相应的大写字母,其他一.标准文件的读写 1.文件的打开 fop ...

最新文章

  1. 北理工硕士被指抄袭投稿论文,校方通报:留校察看
  2. formal method lecture 2: propositional logic
  3. 武侠q传服务器维护,《武侠Q传》就服务器人多过载致歉玩家赞有诚意
  4. MinGW 使用 msvcr90.dll
  5. javascript中substring()、substr()、slice()的区别
  6. Hbase单点安装Version1.1.5
  7. UVA10852 Less Prime【筛选法】
  8. 在网页中使用超链接来打开本地应用(可传参数)
  9. 应用编辑器保存的htnl代码怎么正常显示在页面上
  10. 稀疏表示的合适字典_基于共振稀疏分解的滚动轴承早期微弱故障诊断
  11. html网页对账单样式,怎样在EXCEL中做工行对账单,样式字体要...
  12. roseha 11 用VM虚拟机创建集群测试
  13. php短信不同账号发,php用不同平台批量发短信
  14. 最新计算机cpu简介,电脑处理器性能排行榜 cpu天梯图介绍
  15. 理解计算机如何开平方 二分法收敛 Excel演示
  16. 适配器模式 个人理解+JAVA 小例子
  17. systemTap的安装(设备端,交叉编译工具链)
  18. 图神经网络学习(一)
  19. 先说说什么是主数据和参考数据?
  20. C语言操作SQLite3简明教程

热门文章

  1. HDU 4968(杭电多校#9 1009题)Improving the GPA (瞎搞)
  2. 从源码解析kube-scheduler默认的配置
  3. Json API接口数据生成
  4. c# 用BitArray来管理包含关系
  5. [转]Linq查询DataTable,DataRow
  6. 知乎十万级容器规模的Java分布式镜像仓库实践
  7. Linux基本信息查看命令
  8. 开发板ping不通Linux虚拟机的原因及解决办法
  9. evolving checkers players [Fogel and Chellapilla, 2002]
  10. java 邮箱模板_Java:Spring同时集成JPA与Mybatis