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

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

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

标准文件:标准输入、标准输出、标准错误;---->对应的文件指针:stdin、stdout、stderr;--->键盘、显示器

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

二进制与文本:

大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。)

参考链接

文本文件与二进制文件的区别: https://www.cnblogs.com/pengwangguoyh/articles/3223072.html

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

标准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和标准I/O函数的更多相关文章

  1. C语言文件输入/输出 ACM改进版(用freopen函数方便检验)

    这次用到的文件打开函数不再是fopen,而是stdio.h中包含的另一个函数freopen FILE * freopen ( const char * filename,const char * mo ...

  2. c++ 网络编程(七) LINUX下 socket编程 基于套接字的标准I/O函数使用 与 fopen,feof,fgets,fputs函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614820.html 一.标准I/O 1,什么是标准I/O?其实是指C语言里的文件操作函数,如 ...

  3. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  4. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

  5. C语言---文件

    1. 需要了解的概念 包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流 ...

  6. [转]C语言文件输入/输出ACM改进版(freopen函数)

    C语言文件输入/输出ACM改进版(freopen函数) 2009年5月27日 10:379,457 浏览数发表评论阅读评论   文章作者:姜南(Slyar) 文章来源:Slyar Home (www. ...

  7. C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...

  8. Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O

    Linux系统的I/O也就是一般所说的低级I/O--操作系统提供的基本IO服务,与os绑定,特定于Linux平台.而标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头 ...

  9. Linux 文件操作——系统调用和标准I/O库

    一.什么是文件 在讲述文件操作之前,我们首先要知道什么是文件.看到这个问题你可能会感觉到可笑,因为对于用过计算机的人来说,文件是最简单不过的概念了,例如一个文本是一个文件,一个work文档是一个文件等 ...

随机推荐

  1. C#高级参数out的使用

    C#中有三个高级参数,分别是out,ref,params.本文章中先来介绍out参数的使用. out,用于在方法中返回多余值.(可以理解为让一个方法返回不同的类型值) 我们通过例子来理解例子的功能:用 ...

  2. JSON 解析出错问题

    从 PHP 返回一段 JSON 数据给前台页面,但使用 eval 和 JSON.parse 解析都出错. 在网上那上在线的 json 解析工具解析都正确. 于是一段段删除测试,最终发现问题出在 \r\ ...

  3. bzoj 2653 middle(主席树)

    题面:https://vjudge.net/problem/HYSBZ-2653 博客:https://blog.csdn.net/litble/article/details/78984846 这个 ...

  4. 205. Isomorphic Strings两个数组变形记,是否符合规则

    [抄题]: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

  5. 【Boost】boost库获取格式化时间

    获取时间方式 格式一:YYYYMMDD #include<iostream> #include<string> #include<boost/date_time/greg ...

  6. php学习笔记-超级全局变量

    超级全局变量,超级在哪里呢?相对于global类型的变量,超级全局变量的作用域是没有限制的,函数外.函数内.随便一个PHP文件都可以引用超级全局变量.在PHP中有很多超级全局变量, 常用的有_SERV ...

  7. 3DPDF是个什么东西?

    就是可以把3D模型放入到PDF中,然后客户可以直接用adobe reader查看这个PDF.经过搜索发现,大多数PDF编辑软件都没有直接把3D模型插入到PDF中的功能. 很多是3D软件自身提供的,比如 ...

  8. 数字图像处理实验(2):PROJECT 02-02, Reducing the Number of Gray Levels in an Image 标签: 图像处理MATLAB 2017-

    实验要求: Reducing the Number of Gray Levels in an Image Objective To understand how the number of gray ...

  9. R: 基本的数学运算

    ################################################### 问题:基本数学运算   18.4.30 R语言用于初等数学的计算,都怎么表示??加减乘除.余数. ...

  10. Django rest framework之序列化小结

       最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言    serializers是什么?官网是这样的”Serializers allow complex d ...