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

news2024/12/29 8:59:06

思维导图:

使用标准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;
}

运行效果:

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

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

相关文章

【C++】STL 容器 - multiset 容器 ( std::multiset 容器简介 | std::multiset 容器 常用操作 api 简介 )

文章目录 一、mulset 容器1、std::multiset 容器简介2、代码示例 - multiset 容器 二、std::multiset 容器 常用操作 api 简介1、常用 api 简介2、代码示例 - multiset 容器常用操作 一、mulset 容器 1、std::multiset 容器简介 在 C 语言 的 标准模板库 ( STL , Standard Temp…

【LeetCode每日一题】1154. 一年中的第几天(直接计算+调用库函数)

2023-12-31 文章目录 [1154. 一年中的第几天](https://leetcode.cn/problems/day-of-the-year/)方法一&#xff1a;直接计算思路&#xff1a; 方法二&#xff1a;调用库函数思路 1154. 一年中的第几天 方法一&#xff1a;直接计算 思路&#xff1a; 1.根据所给的字符串&#…

如何使用凹凸贴图和位移贴图制作逼真的模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 本教程将解释如何应用这些效应背后的理论。在以后的教程中&#xff0…

【网络技术】【Kali Linux】Wireshark嗅探(五)文件传输协议(FTP)

一、实验目的 本次实验使用Wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解文件传输协议&#xff08;FTP&#xff09;的工作原理。 二、FTP协议概述 文件传输协议&#xff08;File Transfer Protocol&#xff09;是互联网上使用得最广泛的文件传输协议&#xff0c;用…

3dmax渲染全景图参数设置 3dmax云渲染插件使用

家经常在互联网上看到制作360度全景图的各种教程&#xff0c;但这些教程往往是片段的&#xff0c;并且细节解释并不充分。为此&#xff0c;以下是一些从业者常用的优良做法&#xff0c;涉及到3ds Max中的场景布局和V-Ray渲染设置&#xff0c;这些建议旨在提供一个更全面和详尽的…

前端插件库-VUE3 使用 vue-codemirror 插件

VUE3 插件 vue-codemirror 使用步骤和实例、基于 CodeMirror &#xff0c;适用于 Vue 的 Web 代码编辑器。 第一步&#xff1a;安装 vue-codemirror & codemirror 包 &#xff0c; 以及语言包 npm install codemirror --save npm install vue-codemirror --savenpm insta…

大数据机器学习TF-IDF 算法+SnowNLP智慧旅游数据分析可视化推荐系统

文章目录 大数据机器学习TF-IDF 算法SnowNLP智慧旅游数据分析可视化推荐系统一、项目概述二、机器学习TF-IDF 算法什么是TF-IDF&#xff1f;TF-IDF介绍名词解释和数学算法 三、SnowNLP四、数据爬虫分析五、项目架构思维导图六、项目UI系统注册登录界面各省份热门城市分析城市热…

FastReport分组后半页空白问题解决办法

在使用FastReport进行分组后&#xff0c;经常会出现‘半页空白’的现象。比如按颜色进行分组&#xff0c;有白、黑、红三个颜色&#xff0c;第一类白色信息展示完成后&#xff0c;紧接着的第二类黑色信息&#xff0c;会从新的一页开始展示&#xff0c;白色信息的末尾会出现半页…

前端开发个人简历范本(2024最新版-附模板)

前端开发工程师个人简历范本> 年龄 25岁 性别 男 毕业院校 XX大学 张三 学历 邮箱 leeywai-tools.cn 本科 专业 计算机科学与技术 个人梗概 拥有扎实的前端开发技能和丰富的实践经验 善于与团队合作&#xff0c;适应能力强&#xff0c;能够快速融入团队并贡献自…

C++八股学习心得.3

1.C 数组 C 支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素&#xff0c;最高的地址对应最后一个…

word中设置上标后括号和数字没有上下对齐,解决

问题 word中设置上标后括号和数字没有上下对齐&#xff0c;如下图 原因 因为数字的括号是中文状态下输入的&#xff0c;数字是英文状态。用户需要将其改变成用英文状态下输入 解决办法 统一成英文状态&#xff1a;选中&#xff0c;设置字体为“半角” 如果上标来自参考文献…

CEC2017(Python):五种算法(DBO、HHO、RFO、SSA、PSO)求解CEC2017

一、5种算法简介 1、蜣螂优化算法DBO 2、哈里斯鹰优化算法HHO 3、红狐优化算法RFO 4、麻雀搜索算法SSA 5、粒子群优化算法PSO 二、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem d…

vue-cli项目优化gzip实践

背景&#xff1a;某天测试小妹气冲冲跑过来说你的网站首次打开平均16秒&#xff0c;慢得不行啊&#xff0c;空白时间太久&#xff0c;这样客户是不收货的&#xff0c;必须优化。谁叫我们是以测试驱动开发的&#xff0c;测试妹子的话等同与老板的命令。 空白是吧&#xff0c;我…

FindMy技术用于鼠标

鼠标是计算机的标准配置之一&#xff0c;其设计初衷是为了使计算机的操作更加简便快捷&#xff0c;减少用户在操作中的负担。用户可以通过移动鼠标&#xff0c;实现光标的精确移动&#xff0c;进而选择、拖拽、复制、粘贴等操作。这种操作方式&#xff0c;使得计算机的操作变得…

病急乱投医?大众「危机」

对于外资车企&#xff08;以及合资品牌&#xff09;来说&#xff0c;面对当下电动化、智能化市场白热化竞争的局面&#xff0c;显然有些「病急乱投医」的处境。 本周&#xff0c;大众汽车被曝出正在积极寻找合作伙伴&#xff0c;以帮助实现电动化转型的低成本目标&#xff0c;即…

【AIGC】金融号角吹响,现代技术引爆财富冲击波

在金融领域&#xff0c;创新力量的推动下&#xff0c;AIGC作为一位革命者崭露头角。其独特的理念和颠覆性的方法&#xff0c;将重新定义我们对健康的认知。它不仅改变了我们对金融的理解&#xff0c;更将引领我们走向一个全新的未来。AIGC的出现&#xff0c;无疑为金融界带来了…

Swagger 教程:从零开始学习Swagger

Swagger 是一个开源的 API 设计和文档工具&#xff0c;可以帮助全栈工程师更快、更简单地设计、构建、文档化和测试 RESTful API。本篇文章将为全栈工程师介绍 Swagger 的基础知识和使用方法&#xff0c;以及如何使用 Swagger 设计、文档化和测试 RESTful API。 一、Swagger 简…

03-SpringCloud-Ribbon负载均衡

Ribbon负载均衡 1.1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1&#xff0c;怎么变成了http://localhost:8081的呢&#xff1f; 1.2.源码跟踪 为什么我们只输入…

关于执行 roslaunch xxxxx yyyy.launch 后,没能进入 RViz 就卡死的问题

Problem 话不多说&#xff0c;先看图。 终端也会提示有报错&#xff08;可能是这种&#xff0c;但不确定&#xff09;&#xff1a; 这是发现问题所在之后&#xff0c;故意改错&#xff0c;然后尝试的。☝ Solution 总以为是显卡的问题&#xff0c;一直在研究怎么在 Ubuntu2…

pytorch04:网络模型创建

目录 一、模型创建过程1.1 以LeNet网络为例1.2 LeNet结构1.3 nn.Module 二、网络层容器(Containers)2.1 nn.Sequential2.1.1 常规方法实现2.1.2 OrderedDict方法实现 2.2 nn.ModuleList2.3 nn.ModuleDict2.4 三种容器构建总结 三、AlexNet网络构建 一、模型创建过程 1.1 以LeNe…