学习IO的第三天

news2024/11/28 0:42:45

作业1 使用文件IO完成对图像的读写操作

#include <head.h>

int main(int argc, const char *argv[])
{
	int fd = -1;
	if((fd=open(argv[1],O_RDONLY)) == -1)
	{
		perror("open error");
		return -1;
	}
	int wd = -1;
	if((wd=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0664)) == -1)
	{
		perror("open_w error");
		return -1;
	}

	char wbuf[128] = "";

	while(1)
	{
		int res = read(fd, wbuf, sizeof(wbuf)); //定义res接受read读到的实际的数
		if(res == 0)
			break;

		write(wd, wbuf, res);
	}
	printf("拷贝完成\n");
	

	close(fd);
	close(wd);

	return 0;
}

作业2 使用stat函数实现ls -l指令

#include <head.h>

int main(int argc, const char *argv[])
{
	//定义目录指针
	DIR *dp = NULL;

	//打开目录
	if((dp=opendir("./"))==NULL)
	{
		perror("opendir error");
		return -1;
	}

	//定义一个文件指针,用于存储读取的文件信息
	struct dirent * rp = NULL;

	while((rp = readdir(dp)) != NULL)
	{
		//定义文件状态结构体变量,用于返回文件信息
		struct stat st;
		if(stat(rp->d_name,&st) == -1)
		{
			perror("stat error");
		}
		
		//如果程序执行到此,说明st中已经存放了制定文件的信息
		switch(st.st_mode&S_IFMT)
		{
			case S_IFSOCK:
				printf("s "); //套接字文件
				break;
			case S_IFLNK:
				printf("l "); //链接文件
				break;
			case S_IFREG:
				printf("- "); //普通文件
				break;
			case S_IFBLK:
				printf("b "); //块设备文件
				break;
			case S_IFDIR:
				printf("d "); //目录文件
				break;
			case S_IFCHR:
				printf("c "); //字符设备文件
				break;
			case S_IFIFO:
				printf("p "); //管道文件
				break;
		}


		//文件的权限
		printf("%#o ",st.st_mode&0777);

		//文件的硬链接数
		printf("%ld ",st.st_nlink);

		//文件的id号
		//将uid转换成名字
		struct passwd* pwd = getpwuid(st.st_uid);
		if(NULL==pwd)
		{
			perror("getpwuid");
			return -1;
		}
		printf("%s ",pwd->pw_name);

		//文件的所属组用户
		//讲gid转换成名字
		struct group* grp = getgrgid(st.st_gid);
		if(NULL == grp)
		{
			perror("getgrgid");
			return -1;
		}
		printf("%s ",grp->gr_name);

		//文件大小
		printf("%10ld ",st.st_size);

		//文件的修改时间
		struct tm *tp = localtime(&st.st_ctime);
		printf("%4d-%02d-%02d %02d:%02d:%02d\t",\
					tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday,\
					tp->tm_hour, tp->tm_min, tp->tm_sec);
		
		//文件名
		printf("%s\n",rp->d_name);
	}
	closedir(dp);
	return 0;
}

效果如下

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

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

相关文章

luceda ipkiss教程 42:获取版图所有的电端口

通过判断版图端口的domain.name&#xff0c;可以知道端口是电端口还是光端口&#xff1a; 如&#xff1a; 可以通过如下代码获取两个电端口&#xff08;anode和cathode&#xff09;的信息&#xff1a; from si_fab import all as pdkdef get_electrical_ports(layout):ports …

NTP反射放大攻击

文章目录 什么是NTPNTP反射放大攻击解决方案搭建NTP服务器部署服务器端windows NTP命令行本机测试 部署客户端ntpdatechrony 实验Python利用脚本 什么是NTP 基于UDP协议的NTP&#xff08;网络时间协议&#xff09;&#xff1a;使网络中各个计算机时间同步的一种协议 用途&…

结合ColorUI组件开发微信小程序

1.自定义组件生命周期函数&#xff1a; Component({data: {},attached() {console.log("自定义组件生命周期函数 attached--先执行");this.getPos();},ready() {console.log("ready生命周期函数---在attached之后执行")},methods: {getPos() {var that th…

高效率完成工作任务的工具推荐,待办清单类工具用哪个

日常办公中&#xff0c;领导常常会以高效率完成工作任务来评判一个员工是否敬业&#xff0c;是否在工作岗位上兢兢业业。而想要高效率完成工作也是有技巧的&#xff0c;如提前对各项工作做好规划&#xff0c;制定工作条目清单&#xff0c;跟进好工作任务的进展等等。 职场办公…

HarmonyOS创建JavaScript(类 Web开发模式)项目

上文 HarmonyOS带大家创建自己的第一个Page页面并实现路由跳转(ArkTS)带大家创建了我们项目中第一个自己创建的page 并完成了一个跳转逻辑的编写 上文的开发模式是 ArkTS 的 也被称为 声明式开发范式 还有一种 javaScript的 类Web开发模式 这种方式就类似于我们传统的前端开发模…

Spring Cloud Alibaba实践 --Sentinel

sentinel简介 Sentinel的官方标题是&#xff1a;分布式系统的流量防卫兵。从名字上来看&#xff0c;很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件&#xff0c;如果熟悉Spring Cloud的用户&#xff0c;第一反应应该就是Hystrix。但是比较可惜的是Netflix…

anaconda3的激活和Cvcode配置C++:报错:CondaIOError: Missing write permissions in:

报错&#xff1a;CondaIOError: Missing write permissions in: 原因&#xff1a;anaconda所在文件夹只有root 才有权限 查看用户名 whoamisudo chown -R 用户名 /home/anaconda3激活anaconda3 #激活 source activate #退出 source deactivate 配置Cvcode配置C 首先看g的…

人机之间如何产生互?

人与人之间的“互”是通过相互交流和互动产生的&#xff0c;可以是语言沟通、非语言交流、表情肢体语言等多种形式。通过互相交流和互动&#xff0c;人们能够了解对方的意见、需求和情感&#xff0c;进而建立起相互间的联系和关系&#xff0c;这种互动还可以促进合作、分享知识…

因为 postman环境变量全局变量设置好兄弟被公司优化了!

postman环境变量、全局变量设置 在公司中&#xff0c;一般会存在开发环境、测试环境、线上环境等&#xff0c;如果需要在不 同的环境下切换做接口测试&#xff0c;显然我们需要把所有接口的域名进行修改&#xff0c;如果接 口测试用例较多&#xff0c;那么修改会非常费力&…

一篇文章带你快速入门 Vue 核心语法

一篇文章带你快速入门 Vue 核心语法 一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) …

线程状态:深入理解多任务并发编程中的精髓

目录 引言 1. 线程状态概述 1.1 定义 1.2 线程状态图 2. 线程状态的转换 2.1 新建到就绪 2.2 就绪到运行 2.3 运行到阻塞 2.4 运行到等待和超时等待 2.5 运行到终止 3. 实际编程中的线程状态管理 3.1 合理使用wait()和notify() 3.2 谨慎处理阻塞状态 3.3 使用线程…

学会用bash在linux写脚本 (一)

本章主要介绍如何使用bash写脚本。 了解通配符 了解变量 了解返回值和数值运算 grep的用法是“grep 关键字 file”&#xff0c;意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/messages 中过滤出含有root …

线性代数基础【1】行列式

第一节 行列式的基本概念和性质 一、基本概念 ①逆序 1,2和2,1是一对逆序 ②逆序数 1,2,3,5,4的逆序数为1;1,3,2,5,4逆序数为4; ③行列式 ④余子数和代数余子数 行列式挖掉一个数(例如aij),将原行列式去掉i行j列的行列式M,则M为余子数,代数余子数记为Aij,如果(ij)为偶数…

Gan论文阅读笔记

GAN论文阅读笔记 2014年老论文了&#xff0c;主要记录一些重要的东西。论文链接如下&#xff1a; Generative Adversarial Nets (neurips.cc) 文章目录 GAN论文阅读笔记出发点创新点设计训练代码网络结构代码测试代码 出发点 Deep generative models have had less of an impac…

06 JQuery调用接口

文章目录 一、Qs.js库介绍1. Qs简介2. Qs.parse3. Qs.stringify 二、jQuery调用接口1. 增加&#xff08;Create&#xff09;2. 删除&#xff08;Delete&#xff09;3. 读取&#xff08;Read&#xff09;4. 更新&#xff08;Update&#xff09; 三、示例 一、Qs.js库介绍 1. Qs…

机器连接和工业边缘计算

软件应用和IT创新是制造业投资的主要驱动力。解决方案架构应围绕特定标准进行整合&#xff0c;并采用架构蓝图和最佳实践来满足最终用户的需求。此外&#xff0c;边缘计算&#xff08;Edge Computing&#xff09;也将在制造业中加速部署。 边缘计算是制造业的下一个变革驱动力。…

视频剪辑高手揭秘:如何批量减少时长并调整播放速度,提升视频效果

随着社交媒体的兴起&#xff0c;视频制作的需求越来越大。然而往往视频文件存在一些问题&#xff0c;例如时长过长&#xff0c;或者要调整播放速度以更好地传达信息。这些问题不仅影响了视频的观看体验&#xff0c;也可能导致视频难以在社交媒体上获得广泛的传播。那么&#xf…

电子学会C/C++编程等级考试2021年06月(五级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字变换 给定一个包含5个数字(0-9)的字符串,例如 “02943”,请将“12345”变换到它。 你可以采取3种操作进行变换 1. 交换相邻的两个数字 2. 将一个数字加1。如果加1后大于9,则变为0 3. 将一个数字加倍。如果加倍后大于…

react Hooks实现原理

Fiber 上篇文章fiber简单理解记录了react fiber架构&#xff0c;Hooks是基于fiber链表来实现的。阅读以下内容时建议先了解react fiber。 jsx -> render function -> vdom -> fiber树 -> dom vdom 转 fiber 的过程称为 recocile。diff算法就是在recocile这个过程…

深入探讨Go语言协程调度:GRM模型解析与优化策略

一、线程调度 1、早期单线程操作系统 一切的软件都是跑在操作系统上&#xff0c;真正用来干活&#xff08;计算&#xff09;的是 CPU早期的操作系统每个程序就是一个进程&#xff0c;直到一个程序运行完&#xff0c;才能进行下一个进程&#xff0c;就是“单进程时代”一切的程…