IO作业2.0

思维导图

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{if(argc != 3)  	//判断外部参数	{printf("The terminal format is incorrect\n");return -1;}//定义文件指针FILE * fp = NULL;FILE * fq = NULL;//以只读的形式打开文件if((fp = fopen(argv[1],"r")) == NULL){perror("fopen error");return -1;}//以只写的形式打开文件if((fq = fopen(argv[2],"w")) == NULL){perror("fopen error");return -1;}char buf[100]; 	//定义一个文件搬运工while(1){fread(buf, sizeof(buf), 1, fp);fwrite(buf, sizeof(buf), 1, fq);if(feof(fp)){printf("读取到文件结尾\n");break;}if(ferror(fp)){printf("读取失败\n");break;}}//关闭文件fclose(fp);fclose(fq);printf("拷贝成功\n");return 0;
} 

2> 将注册登录框架重新实现一遍

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int do_register() //定义注册函数
{//1、以追加的形式打开文件FILE * wfp = NULL;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';//以读写追加打开文件 if((wfp = fopen("./sts.txt","a+")) == NULL){perror("fopen error");return -1;}//2、将注册账号和注册密码写入到文件中,//中间用空格隔开,每组用换行隔开fprintf(wfp, "%s %s\n", userName_reg, pwd_reg);//3、关闭文件fclose(wfp);printf("注册成功\n");return 0;
}
int do_login() //自定义登录功能
{//定义容器存放登录账号和登录密码char userName_log[20];char pwd_reg_log[20];//定义变量存储文件读取的账号和密码char userName[20];char pwd[20];//提示输入登录账号和密码printf("请输入登录账号");fgets(userName_log, sizeof(userName_log), stdin);printf("请输入登录密码");fgets(pwd_reg_log, sizeof(pwd_reg_log), stdin);//将两个字符串中的换行改成'\0'userName_log[strlen(userName_log)-1] = '\0';pwd_reg_log[strlen(pwd_reg_log)-1] = '\0';//打开文件,进行账号和密码的比对FILE * rfp = NULL;if((rfp = fopen("./sts.txt","r")) == NULL){perror("fopen 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_reg_log, pwd)== 0){printf("登录成功\n");//关闭文件fclose(rfp);return 0;}}
}int main(int argc, const char *argv[])
{//定义一个变量存储功能选项char num;//制作菜单框架while(1) 		//重复使用菜单框架{printf("\t\t====1、注册====\n");printf("\t\t====2、登录====\n");printf("\t\t====0、退出====\n");printf("请输入功能选项:");scanf("%c",&num);while(getchar() != '\n'); 	//循环吸收垃圾字符以及回车,清空缓存区//对菜单选项多分支选择switch(num){case '1':{//执行注册功能do_register();}break;case '2':{//执行登录功能do_login();}break;case '0':exit(EXIT_SUCCESS); 		//退出程序default:printf("您输入的功能有误请重新输入!!!\n");		}//输入任意键清屏printf("请按任意键输入回车清屏!!!");while(getchar() != '\n');system("clear"); 			//调用终端清屏}return 0;
}

3> 完成图像文件信息的读写操作

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{//定义文件指针打开文件FILE *fp = NULL;if((fp = fopen("./无标题.bmp", "r+")) == NULL){perror("fopen error");return -1;}//向后偏移两个字节得到文件的大小fseek(fp, 2, SEEK_SET);//用于计算图片大小unsigned int size;//从文件中读取一个整形数据fread(&size, sizeof(size), 1, fp);   printf("size = %d\n", size);//想要更改像素unsigned char color[3] = {123, 10, 150};   //将光标偏移到图像数据处fseek(fp, 54, SEEK_SET);for(int i=0; i<1473; i++)  //外层   {for(int j=0; j<648; j++)   //内列{fwrite(color, sizeof(color), 1, fp);}}//关闭文件fclose(fp);return 0;
}

标准IO和文件IO的区别:

标准IO=文件IO+缓冲区

标准IO依赖于库函数,该函数包含了一个缓冲区,该函数会将数据统一放入缓冲区,等待缓冲物时间刷新后,进行一并调用到内核,效率较高

文件IO属于内核提供的函数,依赖于系统调用,每进行一次系统调用,程序都会从用户空间向内核进行一次调换,效率偏低

什么是IO:

程序对外部设备完成信息交换的过程

什么是文件指针:

指向文件地址的指针,该类型是在stdio.h中定义了一个用于描述文件所有信息的结构体

作用:用于描述文件信息,是文件的操作句柄

内涵:包含了缓冲区和文件描述符

简述系统调用:

属于内核,依赖的句柄有文件描述符

每进行一次系统调用,程序都会从用户空间向内核进行一次调换,效率偏低

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

在遍历结果时,若是有一个节点地址被多次访问,则证明有环

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

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

相关文章

k8s-yaml格式

三种常见的项目发布方式&#xff1a; 蓝绿发布&#xff1a; 金丝雀发布&#xff08;灰度发布&#xff09;&#xff1a; 滚动发布&#xff1a; 应用程序升级&#xff0c;面临的最大的问题&#xff0c;就是新旧业务的更换&#xff0c;立项--定稿--需求发布--开发--测试--发布&…

纠删码ReedSolomon

随着大数据技术的发展&#xff0c;HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性&#xff0c;HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本&#xff0c;1TB的原始数据需要占用3TB的磁盘空间&#xff0c;存储利用率只有1/3。而且系统中大部分…

NGUI基础-图集制作(保姆级教程)

目录 图集是什么 如何打开图集制作工具 制作步骤 图集的三个关键配置 相关参数介绍 Atlas Material Texture Padding Tim Alpha PMA shader Unity Packer TrueColor Auto-upgrade Force Square Pre-processor 图集是什么 Unity图集&#xff08;Sprite Atlas&…

Jupyter Notebook的10个常用扩展介绍

Jupyter Notebook&#xff08;前身为IPython Notebook&#xff09;是一种开源的交互式计算和数据可视化的工具&#xff0c;广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面&#xff0c;允许用户创建和共享文档&#xff0c;这些文档包含实时代码、…

erp管理系统哪家好?有什么好用的ERP推荐吗?

“公司属于工业制造&#xff0c;想要实现产供销一体化&#xff0c;生产自动排产&#xff0c;减少缺料停工&#xff0c;降低制造成本&#xff0c;订单准时交付&#xff0c;质量全程追溯。大家有推荐的ERP系统嘛&#xff1f;” 不少企业在落地ERP的时候&#xff0c;出现了很多问…

Windows 7 虚拟机的安装以及解决安装VMVMware tools问题

1.Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 参考&#xff1a;Windows 7 虚拟机的安装以及解决安装VMVMware tools问题 注意&#xff1a;下载官方补丁&#xff1a;Microsoft Update Catalog在智慧联想浏览器中打不开&#xff0c;要在火狐中才能打开下载。 2.win7如…

Linux network — 网络层收发包流程及 Netfilter 框架浅析

Linux network — 网络层收发包流程及 Netfilter 框架浅析 1. 前言2. 基础网络知识2.1 网络分层模型2.2 数据包协议分层2.3 sk_buff 结构2.4 收发包整体框架 3. 网络层&#xff08;IPv4&#xff09;收发包流程4. Netfilter 框架4.1 IPv4 网络层的 Netfilter Hook 点4.2 iptable…

第28关 k8s监控实战之Prometheus(一)

------> 课程视频同步分享在今日头条和B站 大家好&#xff0c;我是博哥爱运维。对于运维开发人员来说&#xff0c;不管是哪个平台服务&#xff0c;监控都是非常关键重要的。 在传统服务里面&#xff0c;我们通常会到zabbix、open-falcon、netdata来做服务的监控&#xff0…

window服务器thinkphp队列监听服务

经常使用linux的同学们应该对使用宝塔来做队列监听一定非常熟悉&#xff0c;但对于windows系统下&#xff0c;如何去做队列的监听&#xff1f;是一个很麻烦的事情。 本文将通过windows系统的服务来实现队列的监听。 对于thinkphp6 queue如何使用&#xff0c;不再赘述。其它系…

【深度学习下载大型数据集】快速下载谷歌云盘数据集

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 跑深度学习的时候,一些数据集比较大,比如60多个G,而且只是训练集. 然后这些数据是由某些实验室组采集的,并不像一些大公司搞的,一般都直接方法一些网盘中. 如果是谷歌网盘,本身通过代理也不麻烦,但是发现即使通过代…

网络安全方向好吗?

先说待遇吧&#xff0c;个人来看&#xff0c;下限不低&#xff0c;上限也就那样……我一直在说一个点&#xff0c;就是大家都是普通人&#xff0c;别去和大佬比&#xff0c;动辄挖出高危漏洞&#xff0c;年薪四五十万的安全技术人员——我这么说吧&#xff0c;占总安全人才的10…

RDS快速入门

目录 实例创建 设置白名单 RDS&#xff08;Relational Database Service&#xff09;是一种托管式的关系型数据库服务&#xff0c;它为用户提供了一种简单、可靠、安全的方式来部署、操作和扩展数据库。具有安全可靠、解决运维烦恼、有效降低成本和自研增加等四大特性&#x…