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

思维导图:

使用标准IO完成两个文件的拷贝

代码:

#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 0;
	}
	//定义文件指针
	FILE *rfp=NULL; //源文件
	FILE *wfp=NULL; //目标文件
	//以只读的形式打开源文件
	if((rfp=fopen(argv[1],"r"))==NULL)
	{
		perror("rfp error");
		return -1;
	}
	//以只写的形式打开目标文件
	if((wfp=fopen(argv[2],"w"))==NULL)
	{
		perror("wfp error");
		return -1;
	}
	//定义一个字符搬运工
	char buf=0;
	while(1)
	{
		buf=fgetc(rfp); //读取文件到字符搬运工
		if(buf==EOF)
		{
			printf("拷贝完成\n");
			break;
		}
		fputc(buf,wfp);  //写入数据
	}
	//关闭文件
	fclose(rfp);
	fclose(wfp);
	return 0;
}

运行效果:

使用文件IO完成两个文件的拷贝

代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	//判断内容
	if(argc!=3)
	{
		printf("内容错误\n");
		return -1;
	}
	//定义文件标示符号
	int rfd=-1;
	int wfd=-1;
	//以只读的形式打开文件
	if((rfd=open(argv[1],O_RDONLY))==-1)
	{
		perror("rfd error:");
		return -1;
	}
	//以只写的形式打开文件
	if((wfd=open(argv[2],O_WRONLY))==-1)
	{
		perror("wfd error:");
		return -1;
	}
	//定义存储容器
	char rbuf[128]="";
	//定义返回字节读数
	int res=0;
	//循序取值
	while(1)
	{
		res=read(rfd,rbuf,sizeof(rbuf)); 	//读取
		if(res==0)
		{
			printf("拷贝完成\n");
			break;
		}
		write(wfd,rbuf,res); //写入
	
	}
	//关闭文件
	close(rfd);
	close(wfd);
	return 0;
}

运行效果: 

将stat函数实现一遍

代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	if(argc!=2)
	{
		printf("内容错误\n");
		return -1;	
	}
	//定义文件属性类型的数据
	struct stat sb;//用于存储获得的文件属性
	//调用函数的文件属性
	stat(argv[1],&sb);
	switch(sb.st_mode&S_IFMT)
	{
	case S_IFSOCK:
		{
			printf("这是套接字文件\t");

		}
		break;
	case S_IFLNK:
		{
			printf("这是链接文件\t");
		}
		break;
	case S_IFREG:
		{
			printf("这是普通文件\t");
		}
		break;
	case S_IFBLK:
		{
			printf("这是块设备文件\t");
		}
		break;
	case S_IFDIR:
		{
			printf("这是目录文件\t");
		}
		break;
	case S_IFCHR:
		{
			printf("这是字符设备文件\n");
		}
		break;
	case S_IFIFO:
		{
			printf("这是管道文件\t");
		}
		break;

	}
	printf("%#o\t%ld\t%ld\n",sb.st_mode&0777,sb.st_size,sb.st_ino);
	return 0;
}

运行效果:

将目录操作实现一遍

代码:

#include<myhead.h>
int main(int argc, const char *argv[])
{
	//外部传参
	if(argc!=2)
	{
		printf("内容错误\n");
		return -1;
	}
	//定义目录指针
	DIR *dp=NULL;
	//打开目录
	if((dp=opendir(argv[1]))==NULL)
	{
		perror("dp error");
		return -1;
	}
	//读取目录信息
	struct dirent *sdp=NULL;
	while((sdp=readdir(dp))!=NULL) //循环读取
	{
		//输出当前文件或目录的信息
		printf("inode:%10ld,size:%10d,%10s,",\
				sdp->d_ino,sdp->d_reclen,sdp->d_name);
		//输出文件类型
		switch(sdp->d_type)
		{
		case DT_BLK:
			{
				printf("b\n");
			}
			break;
		case DT_CHR:
			{
				printf("c\n");
			}
			break;
		case DT_DIR:
			{
				printf("d\n");
			}
			break;
		case DT_FIFO:
			{
				printf("p\n");
			}
			break;
		case DT_LNK:
			{
				printf("l\n");
			}
			break;
		case DT_REG:
			{
				printf("-\n");
			}
			break;
		case DT_SOCK:
			{
				printf("s\n");
			}
			break;
		}
	}
	//关闭目录
	closedir(dp);
	return 0;
}

运行效果:

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

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

相关文章

SQL Server注入之攻防技战法

那天下着很大的雨&#xff0c;母亲从城里走回来的时候&#xff0c;浑身就是一个泥人&#xff0c;那一刻我就知道我没有别的选择了 1.Mssql报错注入 0.判断数据库类型 1.爆当前用户名 2.爆版本 3.爆服务器名 4.判断数据库个数 5.获取全部数据库 语句只适合>2005 爆当前数据…

桶式移位器

前言 本篇文章介绍CPU的核心部件之一&#xff1a;桶式移位器&#xff0c;简称BS&#xff0c;英文全称为Barrel Shifter 桶式移位器最大的特点就是能在单周期内完成多种方式&#xff0c;各种位数的移位操作 常见的移位操作 常见的移位操作种类如下&#xff1a; 算术右移 是指…

google-java-format 配置及应用

以google 的java 风格为基准&#xff0c;以后面的开发中&#xff0c;都需要满足这个&#xff0c;主要用到的是google的两个插件&#xff1a;google-java-format, google_checks.xml代码格式检测&#xff0c;这两个堪称双剑合并&#xff0c;代码成诗。google-java-format替换ide…

RS485数据采集模块,如何一次采集多个modbus设备数据?

在工业数据采集中&#xff0c;RS485是一种常见的数据通信协议&#xff0c;而Modbus则是其上的常用设备协议。那么&#xff0c;如何用一个模块高效采集多个Modbus设备的数据呢&#xff1f;这就是我们今天要探讨的话题&#xff01; 什么是RS485数据采集模块&#xff1f; 首先&a…

算法28:力扣64题,最小路径和------------样本模型

题目&#xff1a; 给定一个二维数组matrix&#xff0c;一个人必须从左上角出发&#xff0c;最后到达右下角 。沿途只可以向下或者向右走&#xff0c;沿途的数字都累加就是距离累加和 * 返回累加和最小值 思路&#xff1a; 1. 既然是给定二维数组matrix&#xff0c;那么二维数…

FreeRTOS——队列及其实战

1.队列概念 1&#xff09;队列是任务到任务、任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09; 2&#xff09;队列类似数组&#xff0c;只能存储有限数量、相同类型的数据&#xff0c;在创建时需指定队列长度与队列项大小 3&#xff09;出队入队阻塞…

xshell登录不上虚拟机了

电脑重启后连不上本地虚机了 1、关闭防火墙 2 虚拟机ping得到主机&#xff0c;而主机ping不到虚拟机的解决办法 原因&#xff1a;可能是主机的网络适配器没有调好 首先&#xff0c;找到虚拟机的网络配置器 根据虚拟机的IP信息修改主机虚拟适配器VMnet8 修改ip使得和虚拟机连…

Element-ui自定义input框非空校验

1、vue自定义非空指令&#xff1a; main.js中自定义非空指令 当input框或下拉框中数据更新时&#xff0c;触发校验 Vue.directive(isEmpty,{update:function(el,binding,vnode){if(vnode.componentInstance.value""){el.classList.add("is-required");}e…

[Unity]实时阴影技术方案总结

一&#xff0c;Planar Shadow 原理就是将模型压扁之后绘制在需要接受阴影的物体上&#xff0c;这种方式十分高效&#xff0c;消耗很低。具体实现过程参考Unity Shader - Planar Shadow - 平面阴影。具按照自己的理解&#xff0c;其实就是根据光照方向计算片元在接受阴影的平面…

详解卡尔曼滤波(Kalman Filter)

1. 从维纳滤波到卡尔曼滤波 黑盒&#xff08;Black Box&#xff09;思想最早由维纳&#xff08;Wiener&#xff09;在1939年提出&#xff0c;即假定我们对从数据到估计中间的映射过程一无所知&#xff0c;仅仅用线性估计&#xff08;我们知道在高斯背景下&#xff0c;线性估计…

计算机创新协会冬令营——暴力枚举题目01

首先是欢迎大家参加此次的冬令营&#xff0c;我们协会欢迎所有志同道合的同学们。话不多说&#xff0c;先来看看今天的题目吧。 题目 力扣题号&#xff1a;2351. 第一个出现两次的字母 注&#xff1a;下述题目和示例均来自力扣 题目 给你一个由小写英文字母组成的字符串 s &…

RocketMQ5.0Pop消费模式

前言 RocketMQ 5.0 消费者引入了一种新的消费模式&#xff1a;Pop 消费模式&#xff0c;目的是解决 Push 消费模式的一些痛点。 RocketMQ 4.x 之前&#xff0c;消费模式分为两种&#xff1a; Pull&#xff1a;拉模式&#xff0c;消费者自行拉取消息、上报消费结果Push&#x…

探索Allure Report:提升自动化测试效率的秘密武器

亲爱的小伙伴们&#xff0c;由于微信公众号改版&#xff0c;打乱了发布时间&#xff0c;为了保证大家可以及时收到文章的推送&#xff0c;可以点击上方蓝字关注测试工程师成长之路&#xff0c;并设为星标就可以第一时间收到推送哦&#xff01; 一.使用 Allure2 运行方式-Python…

【操作系统xv6】学习记录4 -CPU上下文:进程上下文、线程上下文、中断上下文

什么是cpu上下文 CPU 寄存器和程序计数器就是 CPU 上下文&#xff0c;因为它们都是 CPU 在运行任何任务前&#xff0c;必须的依赖环境。 什么是 CPU 上下文切换 先把前一个任务的 CPU 上下文&#xff08;也就是 CPU 寄存器和程序计数器&#xff09;保存起来&#xff0c;然后…

equals()比较字符串和MySQL中=比较结果不一致

问题&#xff1a; 普通车辆入园统计结果数量和普通车辆统计列表数量不一致&#xff1f; 列子&#xff1a;数量:967&#xff0c;列表:974 解决问题步骤 对比统计数量和统计列表的统计方法 统计数量代码实现 一&#xff1a;查询出车辆滞留表数据List 二&#xff1a;查询出…

112. 雷达设备(贪心/逆向思考)

题目&#xff1a; 112. 雷达设备 - AcWing题库 输入样例&#xff1a; 3 2 1 2 -3 1 2 1输出样例&#xff1a; 2 思路&#xff1a; 代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include<…

海外住宅IP代理的工作原理和应用场景分析,新手必看

海外住宅IP代理作为一种技术解决方案&#xff0c;为用户提供了访问全球网络资源和维护隐私安全的方法。本文将介绍海外住宅IP代理的工作原理和应用场景&#xff0c;帮助读者更好地理解和利用这一技术。 一、工作原理 海外住宅IP代理的工作原理基于代理服务器和IP地址的转发。它…

【springboot配置文件加载源码分析】

在Spring Boot的源码中&#xff0c;配置文件的加载是在应用程序启动的早期阶段进行的。具体来说&#xff0c;配置文件加载的主要步骤发生在SpringApplication类的run()方法中的prepareEnvironment方法中&#xff0c;真正读取我们的配置文件还是PropertySourceLoader。 本篇博客…

Docker安装Flarum(开源论坛)

Flarum介绍安装命令 #---------------------------------------------------------- mkdir -p /opt/flarum && cd /opt/flarum #---------------------------------------------------------- docker run -p 8888:8888 --name flarum \ --restartalways \ -v /opt/flar…

靠着这份年终总结,我涨薪8K,成为领导眼中最闪亮的星~

2023 年即将接近尾声&#xff0c;各大公司的“测试媛/猿”们又到了提交年终总结报告的时候了。 每年到这个时候都是抓耳挠腮、冥思苦想的时候&#xff0c;猛然一想&#xff0c;今年跟去年做的事情好像差不多&#xff0c;那么年终总结可以敷衍了事么&#xff1f; 当然是不可以…