• C语言文件I/O和标准I/O函数


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

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

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

    标准文件:标准输入、标准输出、标准错误;---->对应的文件指针: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代表正确读写;(文件)

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

    函数

    函数原型

    参数说明

    返回值

    说明

  • 相关阅读:
    多线程编程
    Phthon环境搭建
    网站开发语言方案的选择
    NSTimer的一个误区
    一个tableview的自带动画
    一个扇形的动画效果
    一点两个uiview动画切换的体会
    关于gcd一些自己的理解。
    使用到定时器,单例和协议的一个小应用(2 )
    使用到定时器,单例和协议的一个小应用(1)
  • 原文地址:https://www.cnblogs.com/grooovvve/p/9952324.html
Copyright © 2020-2023  润新知