学习笔记——C语言基本概念&文件——(13)

1、文件操作

1.1、文件概念

文件:实现数据存储的载体

1.2、文件的分类

按照数据的组织形式分类:

        1.字符文件/文本文件

        2.二进制文件

按照用途分类:

        1.系统文件

        2.库文件--标准库文件/非标准库文件(第三方库)

        3.用户文件

Linux下的文件分类:

        -: 普通文件
        d: 目录文件/文件夹
        s: 套接字文件
        p: 管道文件
        l(小写的 L): 链接文件
        c: 字符设备文件
        b: 块设备文件


1.3、文件操作相关的函数

函数:man1 一般是指令

           man2 一般是系统相关函数

           man3一般是C语言标准库函数

文件操作相关流程:
        1.打开文件--仅仅得到一个文件描述符

        2.写/读--用函数操作文件描述符

        3.关闭文件

1.3.1 打开文件

函数的头文件为:#include<stdio.h>

函数名:fopen

函数原型:FILE *fopen(const char *pathname, const char *mode);

形参:pathname:路径下的文件名

            mode:打开文件的模式

“r”:   只读的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“r+”: 读写的方式打开, 光标在文件开头, 文件不存在, 打开失败!
“w”: 只写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清空
写!
“w+”: 读写的方式打开, 光标在文件开头, 文件不存在, 创建并打开, 文件存在, 清
空写!
“a”: 追加写, 光标在文件末尾, 文件如果不存在, 创建并打开;
“a+”: 可读可写, 根据你第一次操作该文件来确定光标位置, 第一次如果是读,光标默认在文件开头,第一次如果是写,光标在文件末尾;

返回值:

成功返回,FILE*;类型的文件描述符

失败:NULL;

#include<stdio.h>
int main()
{
    FILE*fp=fopen("./1.txt","r+");
    if(fp==NULL)
    {
        printf("文件打开失败");
        return ;
    }
    return;
}

如果1.txt是存在的:打开成功,后续fp就代表1.txt这个文件

如果1.txt是不存在的:打开失败!

插入:perror--打印失败信息

头文件:#include<stdio.h>

函数原型:void perror(const char *s);

形参:s--提供一个字符串即可

功能:打印距离它最近的函数执行失败的原因;注意:这个离它最近的函数指的是从上到下的近。

1.3.2 关闭函数

头文件:#include<stdio.h>

函数原型:int fclose(FILE *stream);

形参:stream:用fopen打开文件得到的文件描述符

返回值:

        成功返回:0

        失败返回:-1

1.3.3 读和写函数

1单字符的读和写

        单字符的写:fputc

        头文件:#include<stdio.h>

        函数原型:int fputc(int c, FILE *stream);

        形参:c--传入char类型的单字符

        将字符c写到文件指针所指向的文件的当前写指针的位置

        stream--文件描述符

        返回值:

                成功:返回写入的单字符

                失败:返回-1

        单字符的读:fgetc

        头文件:#include<stdio.h>

        函数原型:int fgetc(FILE *stream);

        形参: stream-文件描述符
        返回值:
                成功: 读取到的单字符, 用 char 类型来承接;
                失败/读到文件末尾: -1

        插入: rewind: 光标偏移至文件开头
        void rewind(FILE *stream);
        stream: fopen 的返回值
        功能: 光标偏移至文件开头


2 字符串的读和写

        字符串的写:fputs

        函数原型:int fputs(const char *s, FILE *stream);
        形参: s: 要写入文件中的字符串的首地址
                        stream: fopen 的返回值;
        返回值: 成功返回一个非负数( 通常为 1) , 失败返回-1


        字符串的读: fgets
        函数原型:char *fgets(char *s, int size, FILE *stream);
        形参: s: 读取到的内容存放的位置的首地址;
                    size: 你要读多大! !
                    stream: fopen 的返回值;
                    返回值: 成功: char * -- 依旧是 s
                    失败: NULL

C语言默认打开的三个文件

标准输入文件描述符--stdin--对应键盘

标准输出文件描述符--stdout--对应屏幕

标准出错文件描述符--stderr--对应屏幕

3格式化的读和写

        格式化写入:fprintf

        fprintf(fopen(返回值),“原样输出+格式控制符”,输出列表)

        注意:fprintf(stdout,“hello\n”); == printf(“hello\n”);

        格式化读取:fscanf

        要求:fscanf从文件中读,要求格式和fprintf()写入时一模一样;

        这两个函数必须是配合使用的

举例说明:


    int a=10,b=20,c=30;
    fprintf(fp,”%d-%d-%d\n”,a,b,c);
    int x,y,z;
    fscanf(fp,”%d-%d-%d\n”,&x,&y,&z);

4 块读 块写(二进制,要配合使用)

块写:fwrite

函数原型:size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
形参:ptr:要写入的内容的首地址

        size:一次写多大

        nmemb:写几次

        stream:fopen的返回值;

        返回值:真正写入的次数

块读:fread

函数原型:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

形参:ptr:读取的内容存放的位置的首地址

        size:一次读多大

        nmemb:读几次

        stream:fopen的返回值;

        返回值:成功:真正读取的次数,

遇到文件末尾,返回0

光标偏移函数:fseek

头文件:#include<stdio.h>

函数原型:int fseek(FILE *stream, long offset,int whence);

形参:stream:文件描述符

offset:偏移量+往文件末尾方向-往文件开头方向

whence:相对位置

SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
fseek(fp,0,SEEK_SET); == rewind(fp); 以文件开头为起始位置, 偏移 0 字节


ftell函数:计算光标当前位置举例文件开头的偏移量

函数原型:long ftell(FILE *stream);

形参:stream:文件描述符

返回值:光标当前位置举例文件开头的偏移量

程序中计算文件的大小

fessk(fp,0,SEEK_END);//光标达到文件末尾

long num=ftell(fp);//num就是文件大小

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用内容,STM32C8T6是一款通用增强型的48脚单片机,具有64K闪存和LQFP封装。它适用于工业级温度范围-40~85度。下面是一些关于STM32C8T6学习笔记: 1. 学习资料:可以从ST官方网站下载STM32C8T6的数据手册和参考手册,这些手册包含了该单片机的详细信息和使用方法。 2. 开发环境:为了开始学习STM32C8T6,你需要安装相应的开发环境。ST官方提供了一款免费的集成开发环境(IDE)&mdash;&mdash;STM32CubeIDE,它可以帮助你进行代码编写、调试和下载。 3. 编程语言:STM32C8T6可以使用多种编程语言进行开发,包括C语言和汇编语言。C语言是最常用的编程语言,它可以通过STM32CubeIDE进行编写和调试。 4. 引脚配置:在使用STM32C8T6之前,你需要了解每个引脚的功能和配置。数据手册中有一张引脚功能表,可以帮助你了解每个引脚的用途和配置方法。 5. 时钟配置:STM32C8T6具有多个时钟源和时钟分频器,你需要根据自己的需求配置正确的时钟。时钟配置对于外设的正常工作非常重要。 6. 中断和定时器:STM32C8T6支持中断和定时器功能,这些功能可以帮助你实现各种任务和功能。你可以通过配置中断和定时器来实现外设的响应和定时操作。 7. 外设驱动:STM32C8T6具有丰富的外设,包括GPIO、UART、SPI、I2C等。你可以根据自己的需求选择合适的外设,并学习如何配置和驱动这些外设。 8. 调试和下载:在开发过程中,你可以使用STM32CubeIDE提供的调试功能来调试你的代码。一旦代码调试完成,你可以使用ST-Link或其他下载器将代码下载到STM32C8T6上运行。 希望以上笔记对你学习STM32C8T6有所帮助!如果你有任何进一步的问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值