zoukankan      html  css  js  c++  java
  • 文件基本概念

    1. 外部介质,外部介质是针对内存来说的 ,输入输出设备,比如键盘/显示器以及打印机等,将计算机操作外部设备,包括驱动程序,都是以读写文件的模式交换信息的。就和linux一样,一切皆文件。

    2. 文件的分类:

    • 按文件的逻辑结构
      • 记录文件:由具有一定结构的记录组成(定长和不定长)
      • 流式文件:由一个个字符(字节)数据顺序组成 ,没有大小,实时传送的,像正在视频聊天的数据就是
    • 按存储介质:
      • 普通文件:存储介质文件(磁盘,磁带等)
      • 设备文件:非存储介质(键盘,显示器,打印机等)
    • 按数据的组织形式:
      • 文本文件:ASCII文件,每个字节存放一个字符的ASCII码
      • 二进制文件:数据按其在内存中的存储形式原样存放。像txt就是文本文件,exe就是二进制文件。

    3. 文件的标识:
    为什么要这样做,因为C语言把所有的设备都当作文件

    每个文件都以文件名为标识,I/O设备的文件名是系统定义的,如:

    COM1或AUX    第一串行口,附加设备
    COM2      第二串行口,此外,还可能有COM3,COM4等。
    CON     控制台(console ),键盘膜(输入用)或显示器(输出用)
    LPT1或PRN  第一并行口后打印机
    LPT2  第二并行口,还可能有LPT3等
    NUL  空设备
    磁盘文件可以由用户自己命名,但上述被系统(windows和dos下均是如此)保留的设备名字不能用作文件名,如不能把一个文件命名为CON(不带扩展名)或CON.TXT(带扩展名)。

    4. 流

    • 流是一个动态的概念,可以将一个字节形象地比喻成一滴水,字节在设备、文件和程序之间的传输就是流,类似于水在管道中的传输,可以看出,流是对输入输出源的一种抽象,也是对传输信息的一种抽象。通过对输入输出源的抽象,屏蔽了设备之间的差异,使程序员能以一种通用的方式进行存储操作,通过对传输信息的抽象,使得所有信息都转化为字节流的形式传输,信息解读的过程与传输过程分离。
    • C语言中,I/O操作可以简单地看作是从程序移进或移出字节,这种搬运的过程便称为流(stream)。程序只需要关心是否正确地输出了字节数据,以及是否正确地输入了要读取字节数据,特定I/O设备的细节对程序员是隐藏的。

    5. 文件处理方法

    • 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区
    • 非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区


    6. 缓冲区

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        FILE *fp = open("c:\1.txt","w");
    fputs(
    "Hello, world", fp); //写入到缓冲区 fclose(fp); //关闭文件的时候,将缓冲区内容写入文本 }
    •  fopen的参数
    • a+尾部添加,文件指针在尾部。
    • b+文件指针在头部,会清空原先内容。
    • r+文件指针在头部,不会清空内容。
    • 缓冲文件系统为了保护磁盘寿命,把分批次完成的任务汇集在一起,一次性完成。

    7. 文件指针

    • 文件指针是操作系统来管理的,文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件。
    • FILE其实是一个结构体。文件关闭后,它的文件结构体被释放。
    • struct _iobuf
       {
      char *_ptr;//当前缓冲区内容指针
      int   _cnt;//缓冲区还有多少个字符
      char *_base;//缓冲区的起始地址
      int   _flag;//文件流的状态,是否错误或者结束
      int   _file;//文件描述符
      int   _charbuf;//双字节缓冲,缓冲2个字节
      int   _bufsiz;//缓冲区大小
      char *_tmpfname;//临时文件名
      };
      typede f struct _iobuf FILE;
    • C语言程序在进行文件操作时遵循如下操作步骤:打开->读写操作->关闭,通俗地说,打开是获取文件结构、系统为文件分配缓冲区的过程,不打开文件就不能对其进行读写,关闭是释放缓冲区和其他资源的过程,不关闭文件就会慢慢耗光系统资源,。
    • 在进行文件操作时,系统自动与3个标准设备文件联系,这3个文件无需打开和关闭,它们的文件指针分别是:
      nstdin:标准输入文件指针,系统分配为键盘。
      nstdout:标准输出文件指针,系统分配为显示器。
      nstderr:标准错误输出文件指针,系统分配为显示器。
    • 举例来说,从文件输入和向文件输出有两个对应函数fscanf和fprintf,两个函数的原型分别为:
      int fprintf(FILE* ofp,控制字符串,参数表);
      int fscanf(FILE* ifp ,控制字符串,参数表);
    • 参数表中参数的个数同样是任意的,fprintf函数用于将转换后的控制字符串写出到ofp指向的文件中,fscanf用于从ifp指向的文件中读取字节信息为参数表中的参数赋值。
    • 标准输入输出函数printf和scanf实际上等价于:
      fprintf(stdout, 控制字符串,参数表)
      fscanf(stdin, 控制字符串,参数表)
    •  
       int main()
      {
          char str[1024] = {0};
          //上下效果一样
          //scanf("%s", str);
          //printf("%s", str);
          fscanf(stdin, "%s", str);
          fprintf(stdin, "%s", str);
          fprintf(stderr, "
      error-%s", str);
          system(str);
      }
    • stdin和stdout都可以重定向,stderr不可以。
      如果你有一些文件不需要重定向,就可以把它定义为stderr

  • 相关阅读:
    Hello,Cnblogs,I'm Kxia
    运维
    CRT 操作数据库乱码
    STM32 各引脚功能
    遍历结果集
    更换税控服务器主板后,重新申请注册码
    修改远程桌面端口号
    nginx 设置开机启动
    windows 日志清理批处理 设置到计划任务就可以每天清理日志了
    按关键字查找文件
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5811501.html
Copyright © 2011-2022 走看看