嵌入式学习Day16

文件

    1.IO输入输出,操作对象是文件

    2.Linux文件类型:

        b   block       块设备文件

                        按块扫描设备信息的文件

                        存储设备

        c   character   字符设备文件

                        按字符扫描设备信息的文件

        d   directory   目录文件

                        存放文件

        -               普通文件

                        存放数据

                        图片、音视频、压缩包、文本文件

        l   link        链接文件

                        快捷方式

        s   socket      套接字文件

                        用来套接字通信

        p   pipe        管道文件

                        用来进程间通信

    3.普通文件:

        1.ASCII码文件

            文件中所有的字符均为能够在终端上显示的字符

            文本文件、程序.c

        2.二进制文件

            文件中存放数据的二进制形式

            图片、音视频、压缩包

            ASCII码文件是特殊的二进制文件

    4.标准IO、文件IO

        标准IO是库函数

        文件IO是系统调用

        系统调用:功能强大,应对复杂场景不够灵活

        库函数:针对系统调用的封装,使用方便灵活

        标准IO可以在Windows或者Linux平台使用

        文件IO只能在Linux系统平台使用

    5.标准IO:

        getchar、putchar、scanf、printf、gets、puts  ---> 标准IO

        得使用头文件 :#include

    6.从文件中读写数据的流程:

        打开文件 -> 读写文件 -> 关闭文件

        fopen                                fclose

                    fgetc/fputc     单个字符的读写

                    fgets/fputs     字符串的读写

                    fscanf/fprintf  格式化字符串的读写

                    fread/fwrite    二进制文件的读写

    7.函数接口:

        1.fopen

          FILE *fopen(const char *pathname, const char *mode);

          功能:

            打开pathname对应的文件并与其建立一个文件流

          参数:

            pathname:要打开文件路径的字符串

            mode:

                r       只读            文件不存在报错,文件存在只读打开

                r+      读写            文件不存在报错,文件存在读写打开

                w       只写            文件不存在创建,文件存在将文件内容清空,只写打开

                w+      写读            文件不存在创建,文件存在将文件内容清空,写读打开

                a       追加只写        文件不存在创建,文件存在追加只写打开

                a+      追加写读        文件不存在创建,文件存在追加写读打开

          返回值:

              成功返回打开的文件流指针

              失败返回NULL

        2.fclose

          int fclose(FILE *stream);

          功能:

            关闭文件,释放文件流指针

          参数:

            stream:文件流指针

          返回值:

            成功返回0

            失败返回EOF(-1)

嵌入式学习Day16_第1张图片

    8.文件流:

        1.具有方向性(读写)

        2.具有连续性

        3.具有顺序性

        句柄:操作对象的一个抽象

       检测是否有    ????????valgrind --tool=memcheck --leak-check=full ./a.out

    9.特殊的三个流:

        stdin   标准输入流           从终端读取数据

        stdout  标准输出流          向终端打印数据

        stderr  标准出错流           向终端打印数据

        getchar、scanf、gets 通过stdin来读取终端数据

        putchar、printf、puts通过stdout来向终端输出数据

        perror通过stderr来向终端输出数据

嵌入式学习Day16_第2张图片

    10.标准IO缓存:

        缓存分为3类:

            1.全缓存  

                    定义:与文件建立的缓存

                    刷新条件:

                    1.缓存区存满刷新(全缓存大小:4096)

                    2.fflush函数强制刷新

                    3.程序结束/fclose刷新

                     存满所占的空房间大小:4k

               

            2.行缓存  

                定义:与终端建立的缓存            stdin   stdout

                刷新条件:

                    1.缓存区存满刷新(行缓存大小:1024)

                    2.遇到\n刷新

                    3.fflush函数强制刷新

                    4.程序结束/fclose刷新

               存满所占的空房间大小:1k

            3.不缓存

                直接刷新

                缓存区大小: 0k               stderr

                人机交互、界面控制、出错处理

            4.setvbuf

              int setvbuf(FILE *stream, char *buf, int mode, size_t size);

              功能:

                改变一个流的缓存类型

              参数:

                stream:文件流指针

                buf:指定缓存空间的首地址

                mode:

                    _IONBF  不缓存

                    _IOLBF  行缓存

                    _IOFBF  全缓存

                size:

                    设定缓存区的大小

              返回值:

                成功返回0

                失败返回非0

嵌入式学习Day16_第3张图片

    11.fputc

       int fputc(int c, FILE *stream);

       功能:

        向流中写入一个字符

       参数:

        c:写入字符的ASCII码值

        stream:文件流指针

       返回值:

        成功返回写入字符的ASCII码值

        失败返回EOF

       注意:

        1.fputc只能写入一个字符,写入多个字符需要多次调用fputc

        2.fputc只能写入字符
 

作业:

    1.利用fputc向文件file.txt中写入字符串"hello world"

    2.搜索fgetc的功能,参数,返回值含义,实现读取文件中所有的内容并显示在界面上

嵌入式学习Day16_第4张图片

嵌入式学习Day16_第5张图片

 

你可能感兴趣的:(学习)