IO / day03 作业

news2024/11/28 14:50:05

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

代码

#include<myhead.h>

int main(int argc, const char *argv[])
{
    int fd=-1;

    if((fd = open("./bird.bmp", O_RDWR)) == -1)
    {
        perror("fopen error");
        return -1;
    }

    //读取该图片的大小,需要将光标向后偏移2个字节
    lseek(fd, 2, SEEK_SET);
    int bmpsize = 0;

    //读取出图片的大小
    read(fd, &bmpsize, sizeof(int));
    printf("bmpsize = %d\n", bmpsize);

    //前54字节是文件头和信息头所占空间
    //想要对图像内容进行读写操作
    //需要将光标向后偏移54字节后,再进行操作
    lseek(fd, 54, SEEK_SET);

    unsigned char color[3] = {255, 255, 255};      //定义一个颜色,白色
    for(int i=0; i<65; i++)     //外行
    {
        for(int j=0; j<1200; j++)   //内列
        {
			for (int k=0; k<3; k++)
			{

			char c;
			read(fd, &c, sizeof(char));
			c=(c+32)%255;
            write(fd, &c, sizeof(char));
			
			
			}
        }
    }

    //关闭文件
    close(fd);

    return 0;
}

原图片

修改后图片

2. 使用stat函数实现 ls -l 指令功能

代码

#include <myhead.h>

int main(int argc, const char *argv[])
{

	//1.define dir ptr
	DIR *dptr = NULL;

	//2.open directory
	if( (dptr=opendir("./") )==NULL )
	{
		perror("opendir error ");

	}

	//3. define file ptr
	struct dirent *fptr = NULL;



	//定义文件状态结构体
	struct stat st;
	size_t size;
	struct passwd *pwd=NULL;
	struct group *grp=NULL;


	//4.read files 
	while((fptr=readdir(dptr))!=NULL)
	{
		char filename[256]="./";
		strcat(filename, fptr->d_name);

		//printf("filename=%s\n", filename);

		//定义文件状态结构体
		struct stat st;

		//获取信息存放在结构体变量st里
		if( (stat(filename, &st))==-1 )
		{
			perror("stat error");
			return -1;
		}

		//file type
		switch (st.st_mode & S_IFMT) {
		case S_IFBLK:  printf("b"); break;
		case S_IFCHR:  printf("c"); break;
		case S_IFDIR:  printf("d"); break;
		case S_IFIFO:  printf("p"); break;
		case S_IFLNK:  printf("l"); break;
		case S_IFREG:  printf("-"); break;
		case S_IFSOCK: printf("s"); break;
		default:       printf("unknown?\n"); break;
		}

		//file access
		int au=st.st_mode&0777;	
		//printf("au=%o\n", au);
		char crwx[9]="";
		char tmp[9]="";
		for(int i=0; i<3; i++)
		{
			for(int j=1; j<=3; j++)
			{
				char bit =(char) au&(01);
				if(bit==0)
				{
					strcpy(tmp, "-");
					strcat(tmp, crwx);
					strcpy(crwx, tmp);
				}
				else if(bit==1 && (j%3)==1 )
				{
					strcpy(tmp, "x");

					strcat(tmp, crwx);
					strcpy(crwx, tmp);

				}
				else if(bit==1 && (j%3)==2 )
				{
					strcpy(tmp, "w");
					strcat(tmp, crwx);
					strcpy(crwx, tmp);

				}
				else if(bit==1 && (j%3)==0 )
				{
					strcpy(tmp, "r");
					strcat(tmp, crwx);
					strcpy(crwx, tmp);

				}


				au=au>>1;

			}		

		}
		printf("%s ", crwx);

		printf("%ld ", st.st_nlink);
		
		pwd=getpwuid(st.st_uid);
		printf("%s ", pwd->pw_name);

		grp=getgrgid(st.st_uid);
		printf("%s ", grp->gr_name);

		printf("%10ld ", st.st_size);

		struct tm *at = localtime(&(st.st_atime));
		printf("%2d %2d %02d:%02d:%02d ", at->tm_mon+1, at->tm_mday, at->tm_hour, at->tm_min, at->tm_sec);

		printf("%s\n", fptr->d_name);

	}

	return 0;
}

运行结果

ubuntu@ubuntu:~/embedded/04_io/day03$ ./a.out
drwxrwxr-x 5 ubuntu ubuntu       4096 12  5 17:12:30 ..
-rwxrwxr-x 1 ubuntu ubuntu      13000 12  5 21:01:30 a.out
-rw-rw-r-- 1 ubuntu ubuntu         77 12  5 15:36:06 11_dup.c
-rwxrwxrwx 1 ubuntu ubuntu         14 12  5 14:14:42 test.txt
-rw-rw-r-- 1 ubuntu ubuntu         14 12  5 14:29:39 test.bk
-rw------- 1 ubuntu ubuntu    2844054 12  5 20:58:46 bird_r.bmp
-rw-rw-r-- 1 ubuntu ubuntu        400 12  5 11:42:12 05_umask.c
-rw-rw-r-- 1 ubuntu ubuntu        240 12  5 10:46:58 02_open.c
-rw-rw-r-- 1 ubuntu ubuntu         91 12  5 14:48:38 09_lseek.c
-rw-rw-r-- 1 ubuntu ubuntu        109 12  5 15:02:35 10_fd_cpy.c
-rw-rw-r-- 1 ubuntu ubuntu       1007 12  5 20:53:17 12_hw_read_write.c
-rw-rw-r-- 1 ubuntu ubuntu        215 12  5 09:42:22 01_file_desc.c
-rw-rw-r-- 1 ubuntu ubuntu       2139 12  5 21:00:37 14_hw_stat.c
drwxrwxr-x 2 ubuntu ubuntu       4096 12  5 21:01:30 .
-rw-rw-r-- 1 ubuntu ubuntu        910 12  5 17:20:39 13_stat.c
-rw-rw-r-- 1 ubuntu ubuntu        527 12  5 13:59:38 07_read_write.c
-rw-rw-r-- 1 ubuntu ubuntu        385 12  5 11:33:14 04_open_excl.c
-rw-rw-r-- 1 ubuntu ubuntu        734 12  5 14:32:39 08_cpy.c
-rw-rw-r-- 1 ubuntu ubuntu        594 12  5 20:47:33 06_close.c
-rw-rw-r-- 1 ubuntu ubuntu        247 12  5 11:28:57 03_open.c

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

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

相关文章

写论文焦虑?No,免费AI写作大师来帮你

先来看1分钟的视频&#xff0c;对于要写论文的你来说&#xff0c;绝对有所值&#xff01; 还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定 第一步&#xff1a;输入关键信息 第二步&#xff1a;生成大纲 稍等片刻后&#xff0c;专业大纲生成&#xff08;由于举例&am…

python 堆与栈

【一】堆与栈 【 1 】简介 栈&#xff08;stack&#xff09;&#xff0c;有些地方称为堆栈&#xff0c;是一种容器&#xff0c;可存入数据元素、访问元素、删除元素&#xff0c;它的特点在于只能允许在容器的一端&#xff08;称为栈顶端指标&#xff0c;英语&#xff1a;top&a…

智能无人售货奶柜,引领便捷时代

智能无人售货奶柜&#xff0c;引领便捷时代 在当今快节奏的生活中&#xff0c;人们对购物的需求变得越来越迫切。同时&#xff0c;随着科技的进步&#xff0c;无人售货柜作为一种创新的销售模式逐渐受到人们的关注和喜爱。其中&#xff0c;智能无人售货奶柜以其便捷高效的特点成…

OGG实现Oracle19C到postgreSQL14的实时同步

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件

Composer安装 如果你尚未安装Composer&#xff0c;请先安装 Composer。Composer是PHP的依赖管理工具&#xff0c;它可以方便地安装和管理项目中的第三方库。 安装phpoffice/phpspreadsheet&#xff1a; 触发控制器里面的方法 wdjzdc() 在控制中引入 use PhpOffice\PhpSpread…

从零开始的Spring Cloud Gateway指南:构建强大微服务架构

目录 一、 什么是Gateway&#xff1f;1. 网关的由来2. 网关的作用3. 网关的技术实现 二、如何搭建一个简易网关服务1. 引入依赖2. 配置yml文件 三、进阶话题&#xff1a;过滤器和路由配置1. gateway的执行原理2. 路由断言工厂: Predicate Factory3. 网关过滤器&#xff1a;Gate…

Cannot resolve symbol ‘ActivityResultLauncher‘ 报错处理方法

修改 app/build.gradle implementation ‘androidx.appcompat:appcompat:1.2.0’ 为 implementation ‘androidx.appcompat:appcompat:1.4.0’

【模型报错记录】‘PromptForGeneration‘ object has no attribute ‘can_generate‘

通过这个连接中的方法解决&#xff1a; “PromptForGeneration”对象没有属性“can_generate” 期刊 #277 thunlp/OpenPrompt GitHub的 问题描述&#xff1a;在使用model.generate() 的时候报错&#xff1a;PromptForGeneration object has no attribute can_generate 解决方法…

在Spring Cloud中使用组件Zuul网关,并注册到Eureka中去

在上一篇中&#xff0c;我们搭建了Spring Cloud的父子模块&#xff0c;并实现了一个Eureka子模块的启动&#xff0c;可以通过浏览器地址去访问Eureka主页了&#xff0c;相信了解过的童鞋应该看到&#xff0c;主页上并未有任何服务去注册&#xff0c;那么我们就在这篇&#xff0…

【1】一文读懂PyQt简介和环境搭建

目录 1. PyQt简介 1.1. Qt 1.2. PyQt 1.3. 关于PyQt和PySide 2. 通过pip安装PyQt5 3. 无法运行处理 4. VSCode配置PYQT插件 PyQt官网:Riverbank Computing | Introduction 1. PyQt简介 PyQt是一套Python的GUI开发框架,即图形用户界面开发框架. Python中经常使用的GUI…

NXT : 十年源头代码的回溯与展望

11月28日,区块链领域的开山鼻祖之一NXT上线十周年。十年弹指一挥间,从2013年最初基于密码学证明思想构建的NXT,到今日仍在不断拓展与优化的Ardor(NXT 2.0)生态。我们不妨利用这个契机,回溯一下这个源头级公链的创新之路。 2013年,在区块链意味着复制比特币代码并调整挖矿算法的…

Verilog基础:$time、$stime和$realtime系统函数的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html $time、 $stime和$realtime这三个系统函数提供了返回当前仿真时间方法。注意&#xff0c;这里的仿真时间的最小分辨能力是由仿真时间精度决定的&#xff0c;简单来说&#xff0c;可以理解为…

在线测量大尺寸管材的测径仪有哪些?

工业高速发展的背后&#xff0c;离不开与之匹配的高端设备作为科研的支撑。品质检测仪器也在随着现代科技的发展而不断变化&#xff0c;随着科技的进步&#xff0c;各种大口径的管材、管道被生产制造出来&#xff0c;而对其外径尺寸的检测则因口径范围大而使得很少有仪器能进行…

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期(并考虑闰年)

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期 实际代码里面带入默认日期’20230301’这个特殊日期&#xff0c;因为下一年的当前日期少一天为闰年的2月会有29天&#xff0c;使用特殊值校验代码效果图 HTML部分代码 <el-button click"chengTime()&q…

多线程--11--ConcurrentHashMap

ConcurrentHashMap与HashMap等的区别 HashMap线程不安全 我们知道HashMap是线程不安全的&#xff0c;在多线程环境下&#xff0c;使用Hashmap进行put操作会引起死循环&#xff0c;导致CPU利用率接近100%&#xff0c;所以在并发情况下不能使用HashMap。 ConcurrentHashMap 主…

读书笔记-《数据结构与算法》-摘要2[冒泡排序]

冒泡排序 核心&#xff1a;冒泡&#xff0c;持续比较相邻元素&#xff0c;大的挪到后面&#xff0c;因此大的会逐步往后挪&#xff0c;故称之为冒泡。 public class BubbleSort {public static void main(String[] args) {int unsortedArray[] new int[]{6, 5, 3, 1, 8, 7, 2…

软件设计之适配器模式

类模式 我们知道插座的电压为交流电220V&#xff0c;而日常电器使用的是直流电且电压会较小&#xff0c;比如手机充电会通过插头适配器达到额定的输入电流。下面我们实现这个案例&#xff1a;将220V电压转化为5V的电压。 package Adapter.Class;public class Adapter extends …

外包干了8个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

Python实现FA萤火虫优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …