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

思维导图:

使用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;}//以只读的形式打开文件1FILE *rfp=NULL;if((rfp=fopen(argv[1],"r"))==NULL)	//外部参数{perror("rfp error:");return -1;}//以只写的形式打开文件2FILE *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.rhkb.cn/news/229392.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州招聘网有哪些平台

广州有“吉鹿力招聘网” 广州吉鹿力招聘网是广州招聘的一个平台&#xff0c;对于刚毕业的萌新来说&#xff0c;建立好自己的个人简介可以帮助寻找机会。通过在广州吉鹿力招聘网上发布自己的简历和求职信息&#xff0c;可以与招聘方建立联系&#xff0c;并有机会获得面试机会。…

V-rep(CoppeliaSim)添加相机,与python联合仿真,并使用python读取V-rep中的RGB图与深度图

目录 前言在V-rep中构建场景建立python与V-rep通信 前言 本文主要介绍了如何使用python与V-rep联合仿真&#xff0c;并用OpenCV可视化V-rep中视觉传感器所能看到的 RGB图和深度图&#xff0c;效果图如下。 在V-rep中构建场景 本文使用的V-rep版本是3.5&#xff1a; 打开V-…

从零开始 - 在Python中构建和训练生成对抗网络(GAN)模型

生成对抗网络&#xff08;GANs&#xff09;是一种强大的生成模型&#xff0c;可以合成新的逼真图像。通过完整的实现过程&#xff0c;读者将对GANs在幕后的工作原理有深刻的理解。本教程首先导入必要的库并加载将用于训练GAN的Fashion-MNIST数据集。然后&#xff0c;提供了构建…

听GPT 讲Rust源代码--library/proc_macro

File: rust/library/proc_macro/src/bridge/rpc.rs 在Rust源代码中&#xff0c;rust/library/proc_macro/src/bridge/rpc.rs文件的作用是实现了Rust编程语言的编译过程中的远程过程调用&#xff08;RPC&#xff09;机制。 这个文件定义了与编译器的交互过程中使用的各种数据结构…

JavaWeb——前端之AjaxVue

6. 前后端交互 6.1 Ajax&#xff08;原生的&#xff09; 概念&#xff1a; Asynchronous JavaScript And XML&#xff08;异步的JavaScript和XML&#xff09; 作用&#xff1a; 数据交互&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据异步交…

JVM工作原理与实战(三):字节码文件的组成

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、基础信息 1.Magic魔数 2.主副版本号 3.其他信息 二、常量池 1.案例解析 三、方法 1.方法介绍 2.案例解析 四、字段 五、属性 总结 前言 JVM作为Java程序的运行环境&…

【笔试强训】Day1_贪心算法_组队竞赛

题目链接&#xff1a;牛客_组队竞赛 目录 题目解析 代码书写 知识补充 题目解析 题目让我们求所有队伍的水平值总和最大 由题可得&#xff1a; 队伍的水平值等于该队伍队员中第二高水平值; 随机给定3*n个数&#xff0c;需要自己组队并且得出队伍水平最大值&#xff1b; 我…

Python进行批量字符替换的3种方法

一、问题的提出 之前&#xff0c;我写过一篇如何在word中计算数学算式&#xff1a; 如何用Python批量计算Word中的算式-CSDN博客 为了计算算式&#xff0c;就需要对算式进行格式化&#xff0c;把不规则的算式转换成规则的算式&#xff0c;这时就会涉及到一些字符的批量替换。…

山西电力市场日前价格预测【2024-01-03】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-03&#xff09;山西电力市场全天平均日前电价为208.80元/MWh。其中&#xff0c;最高日前电价为358.56元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

Windows上ModbusTCP模拟Master与Slave工具的使用

场景 Modbus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用&#xff1a; Modebus Slave 与 Modbus Poll主从设备模拟软件与Configure Virtual Serial串口模拟软件使用_modbus poll激活-CSDN博客 数据对接协议为Modbus TCP,本地开发需要使…

水果软件2024FL Studio21.3mac苹果中文版

FL STUDIO21发布&#xff0c;提供您一直在等待的出色工作流程功能。通过新效果、多个播放列表曲目选择和无所畏惧的撤消一切编辑&#xff0c;将您的音乐带入2024年。FL Studio21中文完整版是一个功能齐全、开放式架构的PC音乐创作和制作环境。它具有基于音乐音序器的图形用户界…

【番外】在Windows安装Airsim/UE4踩坑合集

在Windows安装Airsim/UE4踩坑合集 1.安装过程中一定要确保Epic Games Launcher是英文环境&#xff0c;保存路径什么的也尽量是英文。2.UE4中的虚幻引擎一定要安装4.27版本以上的&#xff0c;不然的话最后运行vs的时候会报语法错误&#xff0c;网上根本查不到的那种错误。换了版…

Android 13 - Media框架(29)- MediaCodec(四)

上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer index&#xff0c;接下来我们一起学习上层如何拿到buffer并且向下写数据的。 1、获取 input Buffer 获取 MediaCodec 中的 buffer 有两种方式&#xff0c;一种是调用 getInputBuffers…

【ArcGIS微课1000例】0083:地震灾害图件制作之土壤类型分布图

本文基于1:400万矢量土壤图,制作甘肃积石山6.2级地震100km范围内土壤类型分布图。 文章目录 一、土壤分布图预览二、数据集来源及简介三、土壤分布图制作一、土壤分布图预览 二、数据集来源及简介 1. 数据来源 数据集为1:400万中国土壤图,1:400万中国土壤图(2000)由中国科…

BloombergGPT—金融领域大模型

文章目录 背景BloombergGPT数据集金融领域数据集通用数据集分词 模型模型结构模型相关参数训练配置训练过程 模型评估评估任务分布模型对比金融领域评估通用领域评估 背景 GPT-3的发布证明了训练非常大的自回归语言模型&#xff08;LLM&#xff09;的强大优势。GPT-3有1750亿个…

工程(十七)——自己数据集跑R2live

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。 r2live是比较早的算法&#xff0c;编译过程有很多问题&#xff0c;通过以下两个博客可以解决 编译R2LIVE问题&解决方法-CSDN博客 r2live process has died 问题解决了_required process …

3Dmax模型打开后灯光全没了---模大狮模型网

在3ds Max中&#xff0c;有时您可能会打开一个3dmax模型文件后发现灯光似乎丢失了。这可能是由于以下原因之一导致的&#xff1a; 灯光层被隐藏或删除了。在3ds Max中&#xff0c;您可以将不同的对象分配给不同的层&#xff0c;以方便管理和编辑。如果灯光对象被分配到另一个层…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(二)

Matplotlib绘图技巧&#xff08;二&#xff09; 写在前面2. 函数间区域填充函数fill_between()和fill()参数&#xff1a; 3. 散点图 scatter4. 直方图 hist5. 条形图 bar5.1 一个数据样本的条形图参数&#xff1a; 5.2 多个数据样本进行对比的直方图5.3 水平条形图参数 5.4 绘制…

堆排序(C语言版)

一.堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤&#xff1a; 1. 建堆 升序&#xff1a;建大堆 降序&#xff1a;建小堆 2. 利用堆删除思想来进行排序 1.1.利用上下调整法实现堆排序 第一步&#xff1a;建堆 好了&#xff0c;每次建堆都要问自己…

ArkTS基本概念装饰器

目录 ArkTS基本概念 装饰器汇总 ArkTS基本概念 ArkTS是HarmonyOS的主力应用开发语言。 它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁、更自然的方式开发跨…