Linux & 标准C语言学习 <DAY17> *完结

发布时间 2023-03-22 21:11:22作者: Phonyeee
一、文件
    1、文件的分类
        1.文本文件
            是人能看得懂的文件,存储的是字符符号的ASCII码的二进制  //存储'2''5''5'的二进制,显示255

        2.二进制文件
            存储的是数据的补码二进制  //存储255:1111 1111

    2、文件IO
        FILE *fopen(const char *path, const char *mode);
        功能:打开或创建文件
        path:文件的路径
        mode:打开的模式
            r   以只读权限打开文件,文件不存在则失败
            r+  在r的基础上,增加写权限
            w   以只写权限打开文件,文件不存在则创建,存在则清空打开
            w+  在w的基础上,增加读权限
            a   以只写权限打开文件,文件不存在则创建,存在则不清空打开(新写入的数据在文件末尾添加)
            a+  在a的基础上,增加读权限
        返回值:文件指针(结构体指针),不需要关心它的成员,只需知道它只是操作文件的凭证

    3、二进制方式读写文件
        size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
            功能:从文件中读取数据到内存
            ptr:把文件中的数据读到该内存
            size:一次读多少字节
            nmemb:读多少次
            stream:文件指针,fopen的返回值
            返回值:成功读取的次数

        size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
            功能:把一段内存数据写入到文件中
            ptr:待写入的内存的首地址
            size:一次写入的字节数
            nmemb:写入多少次
            stream:文件指针,fopen的返回值
            返回值:成功写入的次数

    4、以文本方式读写
        int fscanf(FILE *stream, const char *format, ...);
            功能:从文件中读取数据到变量中
            stream:要读取的文件
            format:"提示信息+占位符"
            ...:变量地址列表
            返回值:成功读取的变量个数

        int fprintf(FILE *stream, const char *format, ...);
            功能:以文本形式把数据写入文件中
            stream:要写入的文件
            format:"提示信息+占位符"
            ...:变量名列表
            返回值:成功写入的字符数

    5、关闭文件
        int fclose(FILE *stream);
            功能:关闭文件
            stream:要关闭的文件
            返回值:成功返回0,失败返回-1
        注意:文件读写也有缓冲区机制,想要立即写入,需要关闭文件后才能看到

    6、文件位置指针
        每个打开的文件都有一个指针,记录读写操作的位置,它会随着读写函数的执行而自动移动
        以r、r+、w、w+方式打开,文件位置指针默认在文件开头;以a、a+方式打开,文件位置指针默认在文件末尾
        平时按顺序读写时不用关注位置指针,当需要随意读写文件时,可以通过手动设置位置指针来进行
        int fseek(FILE *stream, long offset, int whence);
            功能:调整文件位置指针的位置
            stream:要设置的文件
            offset:偏移值
            whence:基础位置
                SEEK_SET    文件开头
                SEEK_CUR    当前位置
                SEEK_END    文件末尾
            返回值:成功返回0,失败返回-1

        long ftell(FILE *stream);
            功能:获取文件位置指针的位置
            stream:要设置的文件
            返回值:当前位置指针在第几字

        void rewind(FILE *stream);
            功能:调整文件位置指针到开头
            stream:要设置的文件

    7、其它文件函数
        char *fgets(char *s, int size, FILE *stream);
            功能:从文件中读取一行字符串到s中
            size:读取字符串的长度(size-1)
            stream:要读取的文件
            返回值:链式调用

        int fputs(const char *s, FILE *stream);
            功能:写入一个字符串s到文件中,会自动在末尾添加'\n'
            stream:要写入的文件
            返回值:成功写入的字符个数

    main函数参数:int main(int argc,const char* argv[])
        也叫命令行参数
        argc:代表了命令行提供的参数个数  // ./a.out也算一个
        argv:按顺序以字符串形式存储每个命令行参数