linu软件编程——IO

news2025/3/14 0:59:31

 函数接口

        fputc:

man 3 fputc
原型:int fputc(int c, FILE *stream);
功能: 向stream流中写入 字符c
参数:c:要写入的字符的ASCII码值
stream:文件流指针
返回值:成功返回写入字符的ASCII码值
失败返回-1
fputc(ch, stdout) == putchar(ch)

        fgetc:

man 3 fgetc
原型:int fgetc(FILE *stream);
功能:从流中接收一个字符
参数:stream:文件流指针
返回值:成功返回接收到字符的ASCII码值
失败返回EOF(-1)
读到文件末尾返回EOF(-1)
ch = fgetc(stdin) == ch = getchar(

        fwrite:

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

        fread:

man 3 fread
原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE
*stream);
功能:从流中读取nmemb个对象,存放ptr指向的空间中,每个对象size字节
参数:
ptr:存放数据空间首地址
size:每个元素的大小
nmemb:对象个数
stream:文件流指针
返回值:
成功返回实际读到对象个数
失败返回0
读到末尾返回

        fseek:

man 3 fseek
原型:int fseek(FILE *stream, long offset, int whence);
功能:设置流的偏移量
参数:
stream:流
offset:偏移量
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
返回值:
成功返回0
失败返回-1
void rewind(FILE *stream);
功能:
将流的偏移量重新定位到开头
fseek(stream, 0, SEEK_SET) == rewind(stream)
long ftell(FILE *stream);
功能:
获得流的偏移

练习:

(1)利用fread和fwrite实现图片内容的拷贝

主函数↓↓↓↓↓↓↓

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <error.h>

int main(void)
{
	FILE *pa = NULL;
	FILE *pb = NULL;
	char tmp[4096] = {0};
	char name[32] = {0};
	size_t nret = 0;

	printf("输入要复制的文件名\n");
	gets(name);

	pa = fopen(name, "r");
	if(NULL == pa)
	{
		ERR_MSG("打开失败");
		goto err_open_pa;
	}

	pb = fopen("./build/b.jpg", "w");
	if(NULL == pa)
	{
		ERR_MSG("打开失败");
		goto err_open_pb;
	}

	while(1)
	{
		nret = fread(tmp, sizeof(tmp), 1, pa);

		if(0 == nret)
		{
			break;
		}

		fwrite(tmp, sizeof(tmp), 1, pb);
	}
	printf("复制完成\n");

	fclose(pa);
	fclose(pb);

	return 0;

err_open_pb:
	fclose(pa);
err_open_pa:
	return -1;
}


(2)编写程序获得一个文件中出现哪些字符?及每种字符出现的次数?及哪种字符出现的次数
最多?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <error.h>

int main(void)
{
	FILE *pa = NULL;
	int tmp[255] = {0};
	char name[32] = {0};
	char t = 0;
	int i = 0;
	int max = 0;

	printf("输入要统计的文件名\n");
	gets(name);

	pa = fopen(name, "r");
	if(NULL == pa)
	{
		ERR_MSG("打开失败");
		return -1;
	}

	while(1)
	{
		t = fgetc(pa);
		if(EOF == t)
		{
			break;
		}
		tmp[t]++;
	}

	printf("文件共出现以下字符[次数]\n");
	tmp[max] = tmp[0];
	for(i = 0; i < 255; i++)
	{
		if(tmp[i] != 0)
		{
			printf("字符%c 次数%d\n", i, tmp[i]);
		}

		if(tmp[max] < tmp[i])
		{
			max = i;
		}
	}
	printf("字符\"%c\"出现的最多,%d 次\n", max, tmp[max]);

	return 0;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RAMinit 程序编译运行考古记录

本科的时候浅浅研究了DOSBox&#xff0c;今天看到网上挺多关于雷军代码的新闻&#xff0c;我把雷军代码在web上编译出来了&#xff0c;但是我是业余选手&#xff0c;所以做得比较差&#xff0c;不过大家感兴趣可以关注我的dosplay项目&#xff0c;旨在利用js-dos实现汇编语言在…

【Pico】使用Pico进行无线串流搜索不到电脑

使用Pico进行无线串流搜索不到电脑 官串方式&#xff1a;使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障&#xff1a; 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX&#xff0c;若两设备的IP地址前三段相同&…

Golang Model 字段自动化校验设计

背景 在我们日常开发中&#xff0c;不可避免的总要去进行各种参数校验&#xff0c;但是如果在某个场景中&#xff0c;要校验的字段非常多&#xff0c;并且在其中还有耦合关系&#xff0c;那么我们手写校验逻辑就变得非常的低效且难以维护。本篇文档就基于 DDD 领域模型设计的思…

移动端测试的挑战与解决方案:兼容性、网络问题及实战策略

引言 移动应用已成为用户触达服务的核心入口,但移动端测试面临设备多样性、网络波动、用户场景复杂等多重挑战。据Statista统计,2023年全球活跃移动设备超180亿台,操作系统(Android/iOS)版本碎片化率超30%,这对测试工程师提出了极高要求。本文深度解析移动端测试的核心痛…

Spring安装和使用(Eclipse环境)

一、Spring框架概述 1、 什么是Spring Spring是一个开源框架&#xff0c;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复…

图论- Dijkstra算法

Dijkstra算法 前言概念BFS基础模版DijkstraDijkstra函数签名State类distTo 记录最短路径伪代码模版第一个问题解答第二个问题解答第三个问题解答 前言 学习这个算法之间,必须要对BFS遍历比较熟悉,它的本质就是一个特殊改造过的BFS算法. 概念 Dijkstra算法是一种计算图中单源…

CAS单点登录(第7版)9.属性

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 属性 属性定义 概述 属性定义 从身份验证或属性存储库源获取和解析 CAS 中属性的定义时&#xff0c;往往使用其名称进行定义和引用&#xff0c;而无需任何其他元数据或修饰。例如&#…

【电路笔记】-双向计数器

双向计数器 文章目录 双向计数器1、概述2、双向计数器双向计数器能够通过任何给定的计数序列向上或向下方向计数。 1、概述 双向计数器是同步向上/向下二进制计数器,能够在两个方向上向或从某个预设值以及零进行计数。 除了从零开始“向上”计数并增加或递增到某个预设值之外…

Python PyCharm DeepSeek接入

Python PyCharm DeepSeek接入 创建API key 首先进入DeepSeek官网&#xff0c;https://www.deepseek.com/ 点击左侧“API Keys”&#xff0c;创建API key&#xff0c;输出名称为“AI” 点击“创建"&#xff0c;将API key保存&#xff0c;复制在其它地方。 在PyCharm中下…

从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置

前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。3.虚拟机体…

Python 字典思维导图

在本章中&#xff0c;你将学习能够将相关信息关联起来的Python字典。你将学习如何访问和修改字典中的信息。鉴于字典可存储的信息量几乎不受限制&#xff0c;因此我们会演示如何遍 历字典中的数据。另外&#xff0c;你还将学习存储字典的列表、存储列表的字典和存储字典的字典。…

前台、后台、守护进程对比,进程组的相关函数

前台进程&#xff0c;后台进程&#xff0c;守护进程的对比 在前面我们已经了解了前台进程&#xff0c;后台进程&#xff0c;守护进程。 直接在终端中输入命令&#xff1a; 这是最常见的启动前台进程的方式。例如&#xff0c;在终端中输入 ./myprogram 就可以启动 myprogram 程…

openAI最新o1模型 推理能力上表现出色 准确性方面提升 API如何接入?

OpenAI o1模型在回答问题前会进行深入思考&#xff0c;并生成一条内部推理链&#xff0c;使其在尝试解决问题时可以识别并纠正错误&#xff0c;将复杂的步骤分解为更简单的部分&#xff0c;并在当前方法无效时尝试不同的途径。据悉&#xff0c;o1不仅数学水平与美国奥林匹克竞赛…

跨平台键鼠共享免费方案--Deskflow!流畅体验用MacBook高效控制Windows设备

在混合办公场景中&#xff0c;多设备协同已成为提升效率的关键需求。对于同时使用Mac与Windows设备的用户&#xff0c;如何通过一套键盘和触控板实现无缝切换&#xff0c;避免桌面空间浪费与操作冗余&#xff1f;本文将基于开源工具Deskflow&#xff0c;提供一套专业级解决方案…

CAS单点登录(第7版)27.开发人员

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 开发人员 Javadocs文档 group org.apereo.cas has published 42 artifact(s) with total 8210 version(s) org.apereo.cas org apereo.cas 小组已出版 42 件作品&#xff0c;共 8210 个版…

算法与数据结构(多数元素)

题目 思路 方法一&#xff1a;哈希表 因为要求出现次数最多的元素&#xff0c;所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大&#xff0c;则替换。 方法二&#xff1a;摩尔算法 摩尔的核心算法就是对抗&#xff0c;因为存在次数多…

【2.10-2.16学习周报】

文章目录 摘要Abstract一、理论方法介绍1.模糊类增量学习2.Rainbow Memory(RM)2.1多样性感知内存更新2.2通过数据增强增强样本多样性(DA) 二、实验1.实验概况2.RM核心代码3.实验结果 总结 摘要 本博客概述了文章《Rainbow Memory: Continual Learning with a Memory of Divers…

python包的管理

管理python包 python能跻身最欢迎编程语言前列的一个主要原因是python有着活跃的社区提供丰富的包&#xff0c;诸如numpy&#xff0c;pandas&#xff0c;scikit-learn等等。 python的包都存放PyPI中&#xff0c;PyPI即Python Package Index&#xff0c;是python的软件仓库。所…

我用 Cursor 开发了一款个人小记系统

https://note.iiter.cn 项目背景 在日常工作和学习中,我们经常需要快速记录一些想法、收藏一些有用的链接或者保存一些重要的文本、图片内容。虽然市面上已经有很多笔记软件,但我想要一个更轻量、更简单的工具,专注于快速记录和智能检索。于是我开发了这款个人小记系统。 系统…