IO进程线程 day2

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//判断输入是否合法
	if(argc>3)
	{
		printf("输入不合法\n");
		return -1;
	}
	//定义两个文件指针,用于读写
	FILE *fp1=NULL;
	FILE *fp2=NULL;
	if((fp1=fopen(argv[1],"r"))==NULL)
	{
		perror("");
		return -1;
	}
	if((fp2=fopen(argv[2],"w"))==NULL)
	{
		perror("");
		return -1;
	}
	//循环读取搬运
	while(1)
	{
		char buf[20];//定义搬运工
		int res=fread(buf,1,sizeof(buf),fp1);//循环读取字符
		fwrite(buf,1,res,fp2);//将字符拷贝到第二个文件中
		if(feof(fp1))//执行上述操作后,判断光标位置
		{
			break;//如果光标在结尾则退出循环
		}
	}
	//关闭两个文件
	fclose(fp1);
	fclose(fp2);
	return 0;
}

2、实现注册登录框架

#include<stdio.h>
#include<stdlib.h>
#include<string.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("./usr.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_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("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_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;
}

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

#include <stdio.h>
int main(int argc, const char *argv[])
{
    //定义文件指针打开文件
    FILE *fp = NULL;
    if((fp = fopen("./dlam.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] = {255, 0, 0};    //纯蓝色

    //将光标偏移到图像数据处
    fseek(fp, 54, SEEK_SET);

    for(int i=0; i<100; i++)   //外行
    {
        for(int j=0; j<640; j++)   //内列
        {
            fwrite(color, sizeof(color), 1, fp);
        }
    }
    //关闭文件
    fclose(fp);

    return 0;
}

 

面试题整理

1.标准IO和文件IO的区别

答:标准IO依赖于库函数,由程序提供,有缓冲区

文件IO依赖于系统调用,有内核提供,无缓冲区

2.什么是IO

答:I:input输入;O:output输出;是程序于外部设备交换信息的过程

3.什么是文件指针

答:指向文件地址的指针,是stdio.h中定义的结构体类型

用于描述文件信息,使用fopen函数打开,返回操作句柄为文件指针

可以通过指针操作文件

4.简述系统调用

答:依赖于文件描述符;依赖于内核提供的库函数;进行系统调用,程序由用户空间向内核切换

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

答:遍历链表,查看是否有节点被多次访问

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低代码搭建,助力批发零售行业解决方案的快速实现

引言 随着技术的快速发展&#xff0c;低代码技术作为一种高效的业务解决方案&#xff0c;正日益在批发零售行业中展现其巨大的应用潜力。其所带来的快速搭建、灵活性和成本效益&#xff0c;对于现代批发零售业务的管理和发展具有重要意义。 本文旨在探讨低代码技术在批发零售…

努力打工的你存到钱了?2024新蓝海创业项目/适合普通人创业项目

为什么有钱人那么有钱&#xff1f;是他们够努力吗&#xff1f;有一位网友回答是这样回答的&#xff1a; “从小到大我所接触到的一切成功&#xff0c;他的基础都是努力&#xff0c;甚至于奉承时的吃得苦上苦方为人上人。但是那天我的三观出现了认知错误&#xff0c;光靠努力赚…

【番外】【Airsim in Windows WSL2-Ubuntu20.04-ROS】环境配置大全

【番外】【Airsim in Windows & WSL2-Ubuntu20.04-ROS】环境配置大全 【前言&#xff08;可省略不看&#xff09;】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后&#xff0c;目前只能在命令…

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句&#xff0c;然后进行条件语句的拼接&#xff0c;动态标签实现了trim和if标签&#xff0c;所以Sql节点就要加上TrimSqlNode和ifSqlNode&#xff0c;我们最终要获取Sql源&#xff0c;动态Sql语句需要一些处理&#xff0c;所以…

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

面对AI应用创新的风口跃跃欲试&#xff0c;满脑子idea&#xff0c;却苦于缺乏技术背景&#xff0c;不得不望而却步&#xff0c;这曾是许多开发者的苦恼&#xff0c;如今正在成为过去。 12月28日&#xff0c;WAVE SUMMIT深度学习开发者大会2023在北京举办。百度AI技术生态总经理…

文件监控软件丨文件权限管理工具

文件已经成为企业最重要的资产之一。然而&#xff0c;文件的安全性和完整性经常受到威胁&#xff0c;如恶意软件感染、人为误操作、内部泄密等。 为了确保文件的安全&#xff0c;文件监控软件应运而生。本文将深入探讨文件监控软件的概念、功能、应用场景和未来发展等方面。 文…

Grafana UI 入门使用

最近项目上需要使用Grafana来做chart&#xff0c;因为server不是我在搭建&#xff0c;所以就不介绍怎么搭建grafana server&#xff0c;而是谈下怎么在UI上具体操作使用了。 DOCs 首先呢&#xff0c;贴一下官网doc的连接&#xff0c;方便查询 Grafana open source documenta…

【数据库原理】(6)关系数据库的关系操作集合

基本关系操作 关系数据操作的对象都是关系,其操作结果仍为关系,即集合式操作。关系数据库的操作可以分为两大类&#xff1a;数据查询和数据更新。这些操作都是基于数学理论&#xff0c;特别是集合理论。下面是对这些基本操作的解释和如何用不同的关系数据语言来表达这些操作的…

Objects are not valid as a React child (found: object with keys {name}).

在jsx中可以嵌套表达式&#xff0c;将表达式作为内容的一部分&#xff0c;但是要注意&#xff0c;普通对象不能作为子元素&#xff1b;但是数组&#xff0c;react元素对象是可以的 如下&#xff1a;不能将stu这个对象作为子元素放 function App() {const myCal imgStyleconst…

OSG-纹理映射(二)

2.6 Mipmap纹理映射 在一个动态的场景中&#xff0c;当一个纹理对象迅速远离视点时&#xff0c;纹理图像必须随着被投影的图像一起缩小。为了实现这种效果&#xff0c;可以通过对纹理图像进行过滤&#xff0c;适当对它进行缩小&#xff0c;以使它映射到物体的表面时不会产生抖动…

Android 串口协议

前言 本协议是 Android 应用端与主控板之间的通信协议&#xff0c;是串行通信协议。 协议要求同一时间只能有两个通讯端点在相互通讯&#xff0c;采用小端传输数据。 硬件层基于RS485协议&#xff0c;采取半双工&#xff0c;一主多从的通讯模式。Android定义为主机&#xff0c…

DataGear 4.7.0 发布,数据可视化分析平台

DataGear 4.7.0 发布&#xff0c;严重漏洞和BUG修复&#xff0c;具体更新内容如下&#xff1a; 新增&#xff1a;HTTP数据集新增【编码请求地址】支持&#xff0c;可用于解决请求地址中文乱码问题&#xff1b;新增&#xff1a;新增数据源密码加密存储支持&#xff08;开启需设…

怎么有效利用HTTPS协议

HTTPS的发展史可以追溯到早期的互联网时代&#xff0c;当时HTTP协议被广泛使用&#xff0c;但由于通信过程是明文的&#xff0c;导致用户的敏感信息容易被截取和窃取。为了解决这个问题&#xff0c;HTTPS协议应运而生。 HTTPS是在HTTP协议的基础上加入了传输层安全协议&#x…

深挖小白必会指针笔试题<一>

目录 引言 关键解决办法&#xff1a; 学会画图确定指向关系 例题一&#xff1a; 画图分析&#xff1a; 例题二&#xff1a; 画图分析&#xff1a; 例题三&#xff1a; 注&#xff1a;%x是按十六进制打印 画图分析&#xff1a; 例题四&#xff1a; 画图分析&…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

基于JavaSpringMvcVue求职招聘系统详细设计实现 &#x1f345; 作者主页 专业程序开发 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringMvcVue求职招聘系统详细设计实现一、前言介…

众和策略:今日,有“天地板”,也有“地天板”

今日早盘&#xff0c;A股持续坚持弱势震动&#xff0c;两市成交有进一步萎缩的趋势。 盘面上&#xff0c;煤炭、传媒娱乐、旅行、房地产等板块相对活泼&#xff0c;混合实际、PEEK材料、苹果概念、华为汽车等板块跌幅居前。 个股方面&#xff0c;神马电力连续5日涨停&#xf…

react useEffect 内存泄漏

componentWillUnmount() {this.setState (state, callback) > {return;};// 清除reactionthis.reaction();}useEffect 使用AbortController useEffect(() > { let abortController new AbortController(); // your async action is here return () > { abortCo…

TCP/IP的网络层(即IP层)之IP地址和网络掩码,在视频监控系统中的配置和应用

在给客户讲解我们的AS-V1000视频监控平台的时候&#xff0c;有的客户经常会配置错误IP地址的掩码和网关&#xff0c;导致出现一些网路问题。而在视频监控系统中&#xff0c;IP地址和子网掩码是用于标识网络中设备的重要标识符。IP地址被用来唯一地标识一个网络设备&#xff0c;…

express+mongoDB开发入门教程之mongoDB安装

系列文章 node.js express框架开发入门教程 expressmongoDB开发入门教程之mongoDB安装expressmongoDB开发入门教程之mongoose使用讲解 文章目录 系列文章前言一、mongoDB安装1.下载2.安装3. 设置全局环境变量4.启动mongoDB服务 二、可视化管理工具 前言 MongoDB是一个基于分布…

【盛况回顾】聚焦流程创新,共话科技共赢:企业“流程三驾马车”闭环主题沙龙圆满落幕

12月7日&#xff0c;由上海斯歌主办&#xff0c;博阳精讯、凡得科技协办的“流程创新科技共赢——企业流程三驾马车闭环主题沙龙”在上海召开并圆满落幕。本次沙龙&#xff0c;上海斯歌携手来自不同行业的客户与伙伴的资深业务、解决方案专家&#xff0c;围绕流程体系化建模、流…