【嵌入式——C语言】文件操作

文件指针

文件指针在程序中用来标识一个文件的,在打开文件的时候得到文件指针,文件指针就用来代表打开的文件,对文件进行读、写、关闭等操作时,对文件指针操作即可,将文件指针传给相应的读、写、关闭函数。
需要引入#include <stdio.h>

FILE * 文件指针变量名;

打开文件

打开一个已经存在的文件,并返回这个文件的文件指针或者创建一个文件,并打开这个文件,并返回这个文件的文件指针。

FILE* fopen(char const* _FileName,char const* _Mode)
参数1 打开的文件名称、路径+名称
参数2 文件打开的方式

文件打开的方式

  • 只读®:文件不存在返回NULL,文件存在且打开成功,返回文件指针,r(文本文件)、rb(二进制文件);
  • 只写(w):文件不存在,以指定文件名创建文件并打开,文件存在,清空文件内容,打开文件,进行写操作,文件打不开,返回NULL,w(文本文件)、wb(二进制文件);
  • 可读可写(+):r+(文本文件)、rb+(二进制文件);
  • 追加(a):文件不存在,创建该文件,文件存在,在文件末尾进行写操作,a(文本文件)、ab(二进制文件);
FILE* fp;
fp=fopen("filename.txt","r");

关闭文件

关闭fp所代表的文件,一个文件只能关闭一次,成功返回0,不成功返回非0,关闭之后就不能在对文件指针进行读写操作了。

int fclose(FILE* fp)

一次读写一个字符

从文件中读取一个字节,将字节值返回。
:EOF 是常量-1。

  • 以文本(t)的方式,读到结尾返回EOF;
  • 以二进制(b)的方式,读到文件结尾,以feof(文件指针)方法判断是否结尾,文件结束返回非0,未结束返回0。
int fgetc(FILE* stream)

将c写入stream所代表的文件中。输出成功返回输出的字节值,输出失败返回EOF。

int fputc(int c,FILE* stream)

一次读写一个字符串

从stream所代表的文件中读取字符,在读取的时候碰到换行符或者到了文件末尾停止读取,或者读取了size-1个字节停止读取,在读取的内容后面会加\0,作为字符串的结尾。读取成功返回数组的首地址,即s,读取失败返回NULL。

char* fgets(char* s,int size, FILE* stream)

将s所指的字符串写到stream代表的文件中,成功返回写入的字节数,失败返回-1。

int fputs(char const* s, FILE* stream)

读文件

从stream所表示的文件中读取数据,每块是size个字节,共是nmemb块,存放到ptr指向的内存里,返回值,实际读取到的块数。

size_t fread(void* ptr,size_t  size , size_t nmemb, FILE*  stream)

写文件

将ptr指向的内存里的数据,向stream所代表的文件中写入数据,每块size个字节,共nmemb块,返回值,实际写入的块数。

size_t fwrite(void const* ptr, size_t   size , size_t   nmemb , FILE* stream)

随机读写

rewind

复位读写位置,把文件内部的位置指针移动到文件首。

FILE* fp;
rewind(fp);

fseek

定位位置指针,移动文件流的读写位置,一般用于二进制文件。

int fseek(文件指针,偏移量,起始位置)

起始位置:

  • 文件开头 SEEK_SET 0;
  • 文件当前位置 SEEK_CUR 1;
  • 文件末尾 SEEK_END 2;

偏移量: 以起始点为基点,向前向后移动的字节数,整数向后偏移,负数向前偏移。

long ftell

取得文件流目前的读写位置,返回当前读写位置,距离文件起始的字节数,出错返回-1。

FILE* fp;
long ftell(fp);
  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sscanf函数是C语言中一个非常常用的函数,它可以将一个字符串按照指定的格式转换成相应的数据类型。在嵌入式开发中,sscanf函数也是非常常见的,因为很多时候需要从串口或者其他外部设备中读取数据,并将其转换成相应的数据类型进行处理。下面是一些sscanf函数的使用技巧: 1. 使用sscanf函数时一定要注意格式字符串的正确性。格式字符串中的占位符必须与待转换的数据类型相对应,否则会发生未知错误。 2. 如果待转换的字符串中包含多个数据,可以使用多个占位符进行转换。例如,如果待转换的字符串为"1,2,3",可以使用" %d,%d,%d"的格式字符串进行转换。 3. 可以使用sscanf函数的返回值来判断转换是否成功。如果返回值等于待转换字符串的长度,则说明转换成功,否则转换失败。 4. 如果待转换的字符串中包含浮点数,可以使用"%f"或者"%lf"的格式字符串进行转换。 5. 如果待转换的字符串中包含十六进制数,可以使用"%x"的格式字符串进行转换。 6. 如果待转换的字符串中包含字符或字符串,可以使用"%c"或者"%s"的格式字符串进行转换。 7. 如果待转换的字符串中包含指针类型的数据,可以使用"%p"的格式字符串进行转换。 总之,在使用sscanf函数时一定要注意格式字符串的正确性,否则很容易出现转换错误的情况。同时,还应该注意sscanf函数返回值的判断,以确保转换的正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值