华清远见作业第十九天——IO(第二天)

news2024/11/20 3:27:37

思维导图:

使用fread、fwrite完成两个文件的拷贝

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, const char *argv[])
{
	if(argc !=3)
	{
		printf("内容输入错误\n");
		return -1;
	}
	//以只读的形式打开文件1
	FILE *rfp=NULL;
	if((rfp=fopen(argv[1],"r"))==NULL)	//外部参数
	{
		perror("rfp error:");
		return -1;
	}

	//以只写的形式打开文件2
	FILE *wfp=NULL;
	if((wfp=fopen(argv[2],"w"))==NULL)	//外部参数
	{
		perror("wfp error:");
		return -1;
	}
	//定义搬运工
	char buf[128]="";
	//来接读取的项数
	int num=0;
	while(!feof(rfp)&&!ferror(rfp)) //判断文件指针是否到结尾且文件指针没有出错
	{
		num=fread(buf,1,sizeof(buf),rfp); //读取文件
		fwrite(buf,1,sizeof(buf),wfp);	  //写入数据
	}


	//关闭文件
	fclose(rfp);
	fclose(wfp);
	return 0;
}

运行效果:

将登录注册框架实现一遍

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//注册功能
int do_register()
{
	//1追加形式打开文件
	char userName_reg[20]; 		//账号
	char pwd_reg[20]; 			//密码
	//提示输出账号和密码
	printf("请输入注册账号:");
	fgets(userName_reg,sizeof(userName_reg),stdin); //从终端写入
	printf("请输入注册密码:");
	fgets(pwd_reg,sizeof(pwd_reg),stdin); 			//总终端写入
	//最后一位为为‘\0’
	userName_reg[strlen(userName_reg)-1]='\0';
	pwd_reg[strlen(pwd_reg)-1]='\0';
	//打开文件
	FILE *wfp=NULL;
	if((wfp=fopen("usr.txt","a+"))==NULL)
	{
		perror("wfp error:");
		return -1;
	}
	//将注册账号和密码写入文件,中间空格隔开,每组换行隔开
	fprintf(wfp,"%s %s\n",userName_reg,pwd_reg);
	//关闭文件
	fclose(wfp);
	printf("注册成功\n");
	return 0;
}
//登录功能
int do_login()
{
	//定义容器存放终端输入的内容
	char userName_log[20];//账号
	char pwd_log[20];//密码


	//定义容器存放从文件读取的
	char userName[20];//账号
	char pwd[20];//密码
	//提示输出账号和密码
	printf("请输入账户:");
	fgets(userName_log,sizeof(userName_log),stdin);
	printf("请输入密码:");
	fgets(pwd_log,sizeof(pwd_log),stdin);

	//最后一位变为‘\0’
	userName_log[strlen(userName_log)-1]='\0';
	pwd_log[strlen(pwd_log)-1]='\0';

	//打开文件比对以读的形式
	FILE *rfp=NULL;
	if((rfp=fopen("usr.txt","r"))==NULL)
	{
		perror("rfp error");
		return -1;
	}
	//循环遍历所有文件中的账户和密码
	while(1)
	{
		int res=fscanf(rfp,"%s %s",userName,pwd); //从文件中提取文件
		if(res<0)
		{
			printf("登录失败\n");
			//关闭文件
			fclose(rfp);
			return -1;
		}
		//判断登录账户和密码是否匹配
		if(strcmp(userName_log,userName)==0&& strcmp(pwd_log,pwd)==0)
		{
			printf("登录成功\n");
			//关闭文件
			fclose(rfp);
			return 0;
		}
	}
}
int main(int argc, const char *argv[])
{
	//定义一个变量存储功能选项
	char menu;
	//制作菜单
	while(1)
	{
		printf("\t\t=======1注册=======\n");
		printf("\t\t=======2登录=======\n");
		printf("\t\t=======0退出=======\n");
		printf("请输入功能选项:");
		scanf("%c",&menu);
		while(getchar()!='\n'); 	//吸收垃圾字符以及回车
		//对菜单选项多分支选择
		switch(menu)
		{
		case '1':
			{
				//执行注册功能
				do_register();
			}
			break;
		case '2':
			{
				//执行登录功能
				do_login();
			}
			break;
		case '0':
			exit(EXIT_SUCCESS);  //退出程序
		default:printf("内容是输入错误\n");
		}
		printf("请输入任意按键回车清屏\n");
		while(getchar()!='\n');
		system("clear");
	}
	return 0;
}

运行效果:

 

完成图像文件信息的读写操作(拷贝)

代码:

#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>  // 包含 open() 函数的头文件
#include <unistd.h> // 包含 read() 和 write() 函数的头文件
int main(int argc,const char *argv[])
{
	FILE *fd_src=NULL;
    	//以只读的形式打开图片
  	 if((fd_src=fopen("ye.bmp","r"))==NULL) 
	 {
       		perror("open src:");
        	return -1;
         }
 
 	// 创建新的图片文件
	FILE *fd_dest=NULL;
	if((fd_dest = fopen("dest.bmp", "w"))==NULL)
	{
	       	perror("open dest:");
        	fclose(fd_src); // 关闭原始图片文件
      	 	return -1;
    	}
 
    // 读取原始图片内容,并写入新的图片文件中
    char buf[1024];
    int num = 0;//读取数据的个数
	while(!feof(fd_src)&&!ferror(fd_src)) //判断文件指针是否到结尾且文件指针没有出错
	{
		num=fread(buf,1,sizeof(buf),fd_src); //读取文件
		fwrite(buf,1,sizeof(buf),fd_dest);	  //写入数据
	}
 
    // 关闭两个文件
    fclose(fd_src);
    fclose(fd_dest);
 
    return 0;
}

运行效果:

面试 

标准IO与文件IO的区别

标准IO指使用库函数实现,将内核提供的IO函数接口进行了再次封装,以提高效率

文件IO指使用系统调用,内核提供的函数,每次进行IO操作,进程都会从用户空间向内核空间进行一次切换

区别:标准IO = 文件IO + 缓冲区

什么事IO?

I代表input,输入

O代表output,输出

计算机与外部进行交互的过程称为IO操作

什么是文件指针?

文件指针指的是指向文件地址的一个指针,来自与系统封装好的结构体,可以通过这个结构体来描述整个文件的信息,可以通过fopen打开文件得到文件指针。也存在三个特殊的文件指针分别是:

Stdin:标准输入流指针

Stdout:标准输出流指针

Stderr:标准错误流指针

简述一下系统调用

依赖:文件描述符

依赖库:内核提供的函数

操作过程:每次进行系统调用程序都会从用户空间向内核空间进行一次切换,效率低。

如何判断一个单向链表有环?

首先遍历整个单向链表,判断某个节点是否被多次访问,如果是的那就是有个环。

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

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

相关文章

kubeadm来快速搭建一个K8S集群

二进制搭建适合大集群&#xff0c;50台以下的主机 kubeadm更适合中下企业的业务集群 我们采用了二进制包搭建出的k8s集群&#xff0c;本次我们采用更为简单的kubeadm的方式来搭建k8s集群。 二进制的搭建更适合50台主机以上的大集群&#xff0c;kubeadm更适合中小型企业的集群…

如何保障集团下达的政策要求有效落地

随着新一轮国企改革的推进&#xff0c;很多国有企业建立了集团化的管控体系。通过集团化经营管理的模式&#xff0c;帮助国有企业凝聚更强的竞争力&#xff0c;集团企业通过资源整合、反向投资、控股、参股等手法创造业务板块之间的协同、互补效应&#xff0c;从而实现战略联动…

Redis(二)数据类型

文章目录 官网备注十大数据类型StringListHashSetZSetBitmapHyperLogLog&#xff1a;GEOStreamBitfield 官网 英文&#xff1a;https://redis.io/commands/ 中文&#xff1a;http://www.redis.cn/commands.html 备注 命令不区分大小写&#xff0c;key区分大小写帮助命令help…

vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要&#xff1a;要求不同权限账号登录侧边栏颜色不一样。分为 theme&#xff1a;1代表默认样式&#xff0c;theme:2代表深色主题样式。 1.首先定义一个主题文件 theme.js&#xff0c;定义两个主题样式 // 主要是切换菜单栏和菜单头部主题的设计&#xff0c;整体主题样式切…

第4课 FFmpeg读取本地mp4文件并显示

在上节课&#xff0c;我们使用FFmpeg实现了一个最简单的rtmp播放器&#xff0c;它看起来工作正常。这节课&#xff0c;我们尝试让它来播放本地的mp4文件试试。 1.压缩备份上节课工程文件夹为demo3.rar&#xff0c;并修改工程文件夹demo3为demo4&#xff0c;重要的事情再说一遍…

BERT(从理论到实践): Bidirectional Encoder Representations from Transformers【1】

预训练模型:A pre-trained model is a saved network that was previously trained on a large dataset, typically on a large-scale image-classification task. You either use the pretrained model as is or use transfer learning to customize this model to a given t…

认识SpringBoot项目中的Starter

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 循序渐进学SpringBoot ✨特色专栏&…

【MySQL四大引擎,数据库管理,数据表管理,数据库账号管理】

一. MySQL四大引擎 查看存储引擎 SHOW ENGINES support 字段说明 defaulti的为默认的引擎 为YES表示可以使用 为NO表示不能使用 四大引擎 InnoDB InnoDB表类型可以看作是对MyISAM的进一步更新产品&#xff0c;它提供了事务、行级锁机制和外键约束的功能&#xff0c;也是目前…

初中数学:一元二次方程和一元二次函数的相关总结

一、一元二次方程 1、定义 只含有一个未知数&#xff0c;且未知数的最高次数是2的整式方程。 表达式&#xff1a;axbxc0 2、常用解法 1、直接开平方法 2、配方法 3、公式法。(常用) x[-b√(b-4ac)]/2a 4、因式分解法&#xff08;十字相乘法&#xff09;(常用) 将方程通过…

This is probably not a problem with npm.

项目场景&#xff1a; 新创建的vue3项目&#xff0c;根据elementplus官网安装步骤进行按需导入安装&#xff0c;运行项目报错 This is probably not a problem with npm.There is likely additional logging output above. 原因分析&#xff1a; 是elementplus安装版本和自动…

kbdnecat.DLL文件缺失,软件或游戏无法启动运营,快速修复方法

“kbdnecat.DLL文件是什么&#xff1f;为什么一起动游戏或软件&#xff0c;Windows就报错“kbdnecat.DLL文件缺失&#xff0c;软件无法启动””&#xff0c;应该怎么修复呢&#xff1f; 首先&#xff0c;先来了解“kbdnecat.DLL文件”是什么&#xff1f; kbdnecat.DLL是一个动…

CSS渲染性能优化

✨ 专栏介绍 HTML/CSS专栏合集是一个涵盖HTML和CSS两个方面的栏目。HTML是一种标记语言&#xff0c;用于创建网页的结构和内容&#xff0c;而CSS是一种样式表语言&#xff0c;用于控制网页的外观和布局。 在HTML/CSS专栏合集中&#xff0c;我们将深入探讨HTML和CSS的基础知识…

Python内置库os和sys的常用方法汇总

更多Python学习内容&#xff1a;ipengtao.com Python是一门强大的编程语言&#xff0c;具有丰富的标准库&#xff0c;其中包括os和sys两个常用模块。os模块用于与操作系统交互&#xff0c;提供了许多文件和目录操作的方法&#xff0c;而sys模块用于与Python解释器进行交互&…

How to understand the Trusted Intelligent Computing Service in Huawei Cloud

How to understand the Trusted Intelligent Computing Service in Huawei Cloud 概述什么是TICS产品架构TICS规格说明产品优势产品功能应用场景政企信用联合风控政府数据融合共治金融联合营销使能数据交易 快速入门TICS快速入门TICS使用流程简介入门实践 概述 什么是TICS 可信…

07. HTTP接口请求重试怎么处理?

目录 1、前言 2、实现方式 2.1、循环重试 2.2、递归重试 2.3、Spring Retry 2.4、Resilience4j 2.5、http请求网络工具内置重试方式 2.6、自定义重试工具 2.7、并发框架异步重试 2.8、消息队列 3、小结 1、前言 HTTP接口请求重试是指在请求失败时&#xff0c;再次发…

c++ 填充字符 memset fill

https://blog.csdn.net/sandalphon4869/article/details/105404397 https://blog.csdn.net/liuchuo/article/details/52296646 https://blog.csdn.net/bulebin/article/details/105324515 https://blog.csdn.net/liuchuo/article/details/52296646 通常会填充字符串某些位置的值…

opencv期末练习题(5)附带解析

根据R、G、B的值实时修改图像的颜色 import cv2 import numpy as np""" 滑动块调整图像灰度1. 读取图片&#xff0c;并转为灰度图 2. 定义启动滑块和R、G、B滑块 3. 只有启动滑块的值为1时&#xff0c;拖动R、G、B滑块才生效 4. 根据R、G、B的值实时对修改图片的…

JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性

目录 前言 一、站在开发视角&#xff0c;从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a&#xff09;简介 b&#xff09;使用方法 c&#xff09;使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…

每天刷两道题——第三天

1.1两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; 输入&#xff1a;[1,2,3,4] 输出&#xff1a;[2,1,4,3…

【ESP-NOW Web 服务器传感器仪表板 (ESP-NOW + Wi-Fi)】

【ESP-NOW Web 服务器传感器仪表板 &#xff08;ESP-NOW Wi-Fi&#xff09;】 1. 前言2. 同时使用 ESP-NOW 和 Wi-Fi3. 项目概况4. 先决条件4.1 环境配置4.2 DHT 库4.3 ESPAsyncWebSrv服务器库4.4 Arduino_JSON4.5 所需零件4.6 获取接收板 MAC 地址4.7 ESP32 发送电路 5. ESP3…