• Linux 基本语句_6_C语言_文件操作


    FILE结构体:

    struct _IO_FILE {
      int _flags;           /* 文件流状态和属性 */
      char* _IO_read_ptr;   /* 读取指针 */
      char* _IO_read_end;   /* 读取结束位置指针 */
      char* _IO_read_base;  /* 读取缓冲区基址 */
      char* _IO_write_base; /* 写入缓冲区基址 */
      char* _IO_write_ptr;  /* 写入指针 */
      char* _IO_write_end;  /* 写入结束位置指针 */
      char* _IO_buf_base;   /* 缓冲区基址 */
      char* _IO_buf_end;    /* 缓冲区结束位置指针 */
      ...
    };
    
    typedef struct _IO_FILE FILE;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    不通操作系统或者编译器,上述FILE结构体内部成员变量可能会有所不同,但后续用法都差不多,上述是Linux中的FILE变量

    内部定义的变量,为了方便接收fopen()函数的返回值,以便后续的文件操作

    fopen()函数:

    FILE *fopen(const char *filename, const char *mode);
    
    • 1

    const char*:表示一个指向常量字符的指针。这意味着指针所指向的字符值是不可修改的,但可以通过指针来访问其他字符。

    需要输入想要打开的文件,以及对应后续想要进行的操作,具体权限如下:

    1.“r” 以"读"的方式打开一个文本文件(只能读)。
    2.“r+” 在"r"的基础下增加了"写"。
    3.“rb” 以"读"的方式打开一个二进制文件(只能读)。
    4.“rb+” 在"rb"的基础下增加了"写"。
    5.“w” 以"写"的方式创建一个文本文件,如果这个文件已经存在,就会覆盖原来的文件。
    6.“w+” 在"w"的基础下增加了"读"。
    7.“wb” 以"写"的方式创建一个二进制文件。
    8.“wb+” 在"wb"的基础下增加了"读"。
    9.“a” 以"尾部追加"的方式打开一个文本文件(只能写)。
    10.“a+” 在"a"的基础下增加了"读"。
    11.“ab” 以"尾部追加"的方式打开一个二进制文件(只能写)。
    12.“ab+” 在"ab"的基础下增加了"读"。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    char *fgets(char *str, int n, FILE *stream);

    参数:存入数据的数组、长度、要读取数据的文件夹

    一行一行读入数据,并且能储存换行符,只有到达文件末尾才会返回NULL

    int fputs(const char *str, FILE *stream);

    参数:要读出数据的字符串、要写入数据的文件

    fputs 函数会将指定的字符串 str 写入到指定的文件流 stream 中。它会一次性将整个字符串写入文件,直到遇到字符串中的 null 字符为止。

    fclose()的作用

    数据是先写入缓存区再传入磁盘,不关闭数据在磁盘中会被清除,且由于文件没有被关闭,一直处于打开状态,数据泄露

    copy程序代码:

    #include
    #include
    
    int main(int argc, const char *argv[]){
    
        FILE *fps, *fpd;
        char buf[20];
        
        if(argc < 3){//查看文件数量
          printf("argc_lenth < 3");
          exit(1);
        }
    
        fps = fopen(argv[1], "r");//只读
    
        if(fps == NULL){//查看文件状态
          printf("读取文件打开异常");
          exit(1);//异常终止
        }
    
        fpd = fopen(argv[2], "w");
    
        if(fpd == NULL){
          printf("写入文件打开异常");
          exit(1);
        }
        
        while(fgets(buf, 20, fps) != NULL){
             fputs(buf, fpd);
        }
    
        fclose(fpd);
        fclose(fps);//必须关闭文件否者数据泄漏&缓存区数据无法写入磁盘
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    算法刷题-16
    PN532开发指南(uart)
    Lora项目--组网1主机多从机
    Git——分支管理(2)
    0003Java安卓程序设计-springboot基于Android的学习生活交流APP
    软件设计之抽象工厂模式
    MicroExpSTCNN and MicroExpFuseNet-基于三维时空卷积神经网络的自发面部微表情识别
    elasticsearch索引同步
    PyTorch2.0 macOs 10.15以下版本安装失败
    浅谈C++|类的继承篇
  • 原文地址:https://blog.csdn.net/xyint/article/details/133954201