文件IOday1(上):理论知识

IO编程: 


    IO:输入/输出
        在我们这门课程中,要学习如何掌握输入/输出
        GPIO:通用输入/输出
        
        我们为什么要学习IO编程? 
            我们代码产生的数据,数据结构产生的数据
            这些数据,能保存下来么?
            暂时不能保存,这些数据在内存区中,程序结束时,它们也会被释放
            在我们学习完IO后,就可以将这些数据,保存在文件上 
=========================================================================
    IO编程/文件IO:需要掌握向文件进行输入和输出
        1>IO编程的基础知识 ----*
        2>标准IO            ----*
        3>时间编程 
        4>文件IO            ----*
        5>文件和目录属性 
        6>静态库和动态库   ----*
================================================================

1>IO编程的基础知识 ----*

        1>什么是文件? 

            文件:一组相关数据的有序集合。
            
        2>按类型分类:(linux系统文件分类)


          他们的10位文件属性位,头位:文件类型
          在ls -l下,可以看到文件的文件类型和文件权限 
          drwx-wxrwx   一共10位 
           111011111
          1+3+3+3   :文件类型  用户权限  组权限  其他用户权限
                                 八进制   八进制   八进制
          

 常规文件            标识符:-


             ASCII码文件
             二进制的文件
            目录                标识符:d 
            字符设备            标识符:c 
            块设备                标识符:b 
            有名管道            标识符:p         --->多进程线程 
            套接口                标识符:s         --->网络编程
            符号链接            标识符:l 
            
        3>知晓文件,就需要学习,对文件进行IO? 
                    >>>参考图片
            


            
        4>系统调用


            系统调用
                用户空间进程访问内核的接口         ------*提供空间接口
                把用户从底层的硬件编程中解放出来
                极大的提高了系统的安全性
                使用户程序具有可移植性
                是操作系统的一部分
            


        5>库函数 


            库函数 --->printf  scanf 
            库函数为了实现某个功能而封装起来的API集合
            提供统一的编程接口,更加便于应用程序的移植
            是语言或者应用程序的一部分
    

        6>概念总和


        文件描述符
            顺序分配的非负整数
            内核用以标识一个特定进程正在访问的文件
            其他资源(socket、pipe等)的访问标识
            
        标准输入、标准输出和标准出错
            由shell默认打开,分别为0/1/2
                0--->标准输入(stdin)
                1--->标准输出(stdout)
                2--->标准错误输出(stderr)
            
        不用缓存的I/O  ---->文件IO 
            通过文件描述符进行访问  --->核心:文件描述符
            open()/read()/write()/lseek()/close()… 
            
        标准I/O        ---->标准IO 
            通过FILE*进行访问        --->核心:FILE*
            printf()/fprintf()/fopen()/fread()/fwrite()/fseek()/fclose()…

        全局错误码errno
            在errno.h中定义,全局可见
            错误值定义为“EXXX”形式,如EACCESS
            
        处理规则
            如果没有出错,则errno值不会被一个例程清除,即只有出错时,才需要检查errno值
            任何函数都不会将errno值设置为0,errno.h中定义了所有常数都不为0
            
        错误信息输出
            strerror() - 映射errno对应的错误信息
            perror() – 输出用户信息及errno对应的错误信息
========================================================================
  

 2>标准IO


        1>标准IO的概念: 


            不仅在UNIX系统,在很多操作系统上都实现了标准I/O库
            标准I/O库由ANSI C标准说明
            标准I/O库处理很多细节,如缓存分配、以优化长度执行I/O等,这样使用户不必关心如
            何选择合适的块长度
            标准I/O在系统调用函数基础上构造的,它便于用户使用
            标准I/O库及其头文件stdio.h为底层I/O系统调用提供了一个通用的接口。
      

 总结: 


            1>现在很系统都支持标准IO 
            2>标准IO由C库提供 拥有缓冲区 
            3>标准IO比较智能化 
            4>标准IO是基于文件IO开发的 
            5>标准IO的大部分函数:头文件为stdio.h 
          

 
        2>标准IO的核心 


            文件指针:流:FILE *  --->结构体指针    FILE指针:每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息,这些信息是保存在一个结构体类型的变量中,该结构体类型是由系统定义的,取名为FILE。
                    
            标准I/O库的所有操作都是围绕流(stream)来进行的,在标准I/O中,流用FILE *来描述。 ------*
            标准I/O库是由Dennis Ritchie在1975年左右编写的
        流(stream)
        定义:所有的I/O操作仅是数据简单的从程序移进或者移出,这种字节流,就称为流。
        分类:文本流/二进制流。    
                --->转码不一样
            
        文本流
            定义:在流中处理的数据是以字符出现。在文本流中,’\n’被转换成回车符CR和换行符LF的ASCII
            码0DH和0AH。而当输出时,0DH和0AH被转换成’\n’
            数字2001在文本流中的表示方法为 ‘2’ ‘0’ ‘0’ ‘1’
            ASCII: 50 48 48 49
            
        二进制流             
            定义:流中处理的是二进制序列。若流中有字符,则用一个字节的二进制ASCII码表示;
            若是数字,
            则用对应的二进制数表示。对’\n’不进行变换
            数字2001在二进制流中的表示方法为 00000111 11010001。    
  

                 
        标准IO的详解: 


            缓冲文件系统(高级磁盘IO)--->标准IO
            目的:尽量减少使用read/write的调用   --->减少系统调用
            定义:系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先        送到内存缓冲区,装满缓冲区在一起送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据
            读入到内存缓冲区中,然后再从缓冲区逐个的将数据送到程序的数据区。
            
            分类:全缓存,行缓存,不缓存。
                全缓冲:  --->打开文件 
                    缓冲区刷新条件: 
                        1>程序正常结束 
                        2>文件被关闭 -->fclose
                        3>缓冲区满了 
                        4>强制刷新  fflush()
                    
                行缓冲:  --->标准输入/标准输出 
                    缓冲区刷新条件:
                        1>程序正常结束 
                        2>文件被关闭 -->fclose
                        3>缓冲区满了 
                        4>强制刷新  fflush()
                        5>缓冲区中遇到的\n 
                        
                不缓冲:  --->标准错误输出 --->针对报错
                
            非缓冲文件系统 (低级磁盘IO)--->文件IO             定义:依靠于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出。        
=======================================================================
    有点乱。。。。直接看(下)会比较理想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值