嵌入式学习笔记总结Day19

本文详细介绍了C语言中标准IO库的几个关键函数,如fgetc、fputc用于字符读写,fputs和fgets处理字符串,以及文件流定位的函数如ftell、rewind和fseek。通过实例演示了如何使用这些函数进行文件内容的拷贝操作。
摘要由CSDN通过智能技术生成

今天主要学习标准IO的几个接口函数,并通过这些函数实现一些功能。

一、函数接口

1.fgetc
int fgetc(FILE *stream);
功能:
从流中读取下一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
失败返回EOF
读到文件末尾返回EOF

2.fputc
int fputc(int c, FILE *stream);
功能:将以c为ascii码的字符写入流中
返回值:
成功返回被写入的字符,失败返回EOF

用fgetc和fputc完成文件内容的拷贝:

#include <stdio.h>

int main(void)
{
	FILE *fsrc = NULL;
	FILE *fdst = NULL;
	char tmp = 0;

	fsrc = fopen("src.txt", "r");
	if (NULL == fsrc)
	{
		perror("fail to fopen");
		return -1;
	}

	fdst = fopen("dst.txt", "w");
	if (NULL == fdst)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		tmp = fgetc(fsrc);
		if (EOF == tmp)
		{
			break;
		}
		fputc(tmp, fdst);
	}

	fclose(fsrc);
	fclose(fdst);

	return 0;
}

3.fputs
int fputs(const char *s, FILE *stream);
功能:
向流中写入一个字符串
参数:
s:字符串首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF

4.fgets
char *fgets(char *s, int size, FILE *stream);
功能:
从流中读取一个字符串
参数:
s:存放字符串空间首地址
size:最多读取字符的个数
stream:文件流指针
返回值:
成功返回存放字符串空间的首地址
失败返回NULL
读到文件末尾返回NULL
使用fputs和fgets完成文件内容的拷贝:

#include <stdio.h>

int main(void)
{
	FILE *fsrc = NULL;
	FILE *fdst = NULL;
	char tmpbuff[4096] = {0};
	char *pret = NULL;

	fsrc = fopen("src.txt", "r");
	if (NULL == fsrc)
	{
		perror("fail to fopen");
		return -1;
	}

	fdst = fopen("dst.txt", "w");
	if (NULL == fdst)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		pret = fgets(tmpbuff, sizeof(tmpbuff), fsrc);
		if (NULL == pret)
		{
			break;
		}
		fputs(tmpbuff, fdst);
	}

	fclose(fsrc);
	fclose(fdst);

	return 0;
}

5.fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中
参数:
ptr:存放数据空间的首地址
size:每个数据对象的大小
nmemb:数据对象的个数
stream:文件流指针
返回值:
成功返回写入对象的个数
失败返回0
读到文件末尾返回0

6.fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:
从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中
参数:
ptr:存放读取内容空间首地址
size:读取对象的大小
nmemb:读取对象的个数
stream:文件流指针
返回值:
成功返回读到对象个数
失败返回0
读到文件末尾返回0
使用fread和fwrite完成文件内容的拷贝:

#include <stdio.h>

int main(void)
{
	FILE *fsrc = NULL;
	FILE *fdst = NULL;
	size_t nret = 0;
	char tmpbuff[4096] = {0};

	fsrc = fopen("src.jpg", "r");
	if (NULL == fsrc)
	{
		perror("fail to fopen");
		return -1;
	}

	fdst = fopen("dst.jpg", "w");
	if (NULL == fdst)
	{
		perror("fail to fopen");
		return -1;
	}

	while (1)
	{
		nret = fread(tmpbuff, 1, sizeof(tmpbuff), fsrc);
		if (0 == nret)
		{
			break;
		}
		fwrite(tmpbuff, 1, nret, fdst);
	}

	fclose(fsrc);
	fclose(fdst);

	return 0;
}

7.fprintf
int fprintf(FILE *stream, const char *format, …);
功能:
将格式化字符串输出到stream指向的流中

printf
fprintf(stdout, );

8.fsancf
int fscanf(FILE *stream, const char *format, …);
功能:
从流中读取格式化的字符串

二、流的定位

1.ftell
long ftell(FILE *stream);
功能:
获得流的偏移量

2.rewind
void rewind(FILE *stream);
功能:
将流的偏移量重新设置到开头

3.fseek
int fseek(FILE *stream, long offset, int whence);
功能:
设置流的偏移量
参数:
stream:文件流指针
offset:偏移量
> 0 向后偏移
< 0 向前偏移
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值