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

FILE结构体:

c 复制代码
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;

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

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

fopen()函数:

复制代码
FILE *fopen(const char *filename, const char *mode);

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"的基础下增加了"读"。

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

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

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

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

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

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

fclose()的作用

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

copy程序代码:

c 复制代码
#include<stdio.h>
#include<stdlib.h>

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;
}
相关推荐
luj_17682 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
jimy16 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
三品吉他手会点灯7 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
小樱花的樱花8 小时前
Linux 线程的创建
linux·c语言·开发语言
东华万里13 小时前
第36篇: 数据结构核心:栈与队列深度解析
c语言·数据结构·算法·大学生专区
鱼子星_16 小时前
【C++】类和对象(下)——初始化列表,类型转换,static成员,友元,内部类,匿名对象,编译器的优化拓展
c语言·c++·笔记
似是燕归来1 天前
嵌入式工程师进阶指南:适配器编程设计模式一
c语言·stm32·适配器模式·嵌入式开发
skywalk81631 天前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
额鹅恶饿呃1 天前
C语言中的数据结构和变量
c语言·数据结构·算法
捷瑞电子工坊1 天前
C语言条件操作符(? :)——三分钟上手
c语言·条件操作符·编程基础·三目运算符