IO / day03 作业

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

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

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

相关文章

Game-On论文阅读

异质性是多模态研究中最重要的关注点 文章目录 Abstract1. Introduction2. Related Work2.1 多模态假新闻检测 **以往的研究方法**2.2 GNNs在多模态研究中的地位3. 方法论3.1 视觉和文本特征编码器3.2 共享多模态空间和多模态图构建3.3 图注意层3.4 假新闻检测器4. 实验与结果4…

Linux的IO模型——阻塞IO

当要读数据recvfrom时&#xff0c;其实就需要两个阶段&#xff0c;一是将硬盘数据读到内核缓冲区&#xff0c;二是将内核缓冲区数据拷贝到用户缓冲区。而阻塞IO就是在两个阶段中用户进程都必须阻塞等待。

2024年天津财经大学珠江学院专升本专业课《管理学原理》考试大纲

天津财经大学珠江学院2024年高职升本科专业课考试《管理学原理》考试大纲 一、本大纲系天津财经大学珠江学院2024年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理&#xff08;第二版&#xff09;》&#xff0c;机械工业出版社&#xff…

一篇吃透大厂面试题,2024找工作一帆风顺。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

企业持续绿色创新水平数据集(1999-2022年)

参考何郁冰&#xff08;2017&#xff09;的做法&#xff0c;计算持续创新水平。将绿色专利申请的前后期对比来反映创新的持续程度。创新持续性企业在第t&#xff0d;1与t年间的专利申请量之和较第t&#xff0d;2与t&#xff0d;1年间的专利申请量之和的环比增长率&#xff0c;再…

【广州华锐互动】VR沉浸式体验铝厂安全事故让伤害教育更加深刻

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为我们的生活带来了前所未有的便捷和体验。在安全生产领域&#xff0c;VR技术的应用也日益受到重视。 VR公司广州华锐互动就开发了多款VR安全事故体验系统&#xff0c…

python 堆与栈

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

基于混沌算法的图像加密解密系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义&#xff1a; 随着信息技术的迅猛发展&#xff0c;图像的传输和存储已经成为现代社会中不可或缺的一部分。然而&#xff0c;随着互联网的普及和信息的快速传播&am…

什么是CAS, 什么是AQS

文章目录 什么是CAS, 什么是AQSCASAQS 什么是CAS, 什么是AQS CAS AQS AQS 全称是AbstractQueuedSynchronizer&#xff0c; 是juc 下一个核心的抽象类&#xff0c;用于构建各种同步器和锁 比如我们熟悉的 ReentrantLock、ReadWriteLock、CountDownLatch等等是基于AQS. 首先在…

单机无锁线程安全队列-Disruptor

Disruptor 1、基本介绍 说到队列&#xff0c;除了常见的mq中间件&#xff0c;java中也自带线程安全的BlockingQueue&#xff0c;但是BlockingQueue通过在入队和出队时加锁的方式避免并发操作&#xff0c;性能上会大打折扣。 而Disruptor是一个线程安全、低延迟、吞吐量高的队…

波奇学C++:类型转换和IO流

隐式类型转换 int i0; double pi; 强制类型转换 int* pnullptr; int a(int)p; 单参数构造函数支持隐式类型转换 class A { public:A(string a):_a(a){} private:string _a; }; A a("xxxx"); //"xxx" const char* 隐式转换为string 多参数也可以通过{…

深入理解强化学习——马尔可夫决策过程:占用度量-[基础知识]

分类目录&#xff1a;《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程&#xff1a;贝尔曼期望方程-[基础知识]》中提到&#xff0c;不同策略的价值函数是不一样的。这是因为对于同一个马尔可夫决策过程&#xff0c;不同策略会访问到的状态的概率分布是…

园区规划技术要点

&#xff08;一&#xff09;技术点介绍 1.WLAN&#xff1a;无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种无线计算机网络&#xff0c;使用无线信道代替有线传输介质连接两个或多个设备形成一个局域网LAN&#xff08;Local Area Network&#xff09…

【亲测有效,超详细】收到微信小程序限期完成微信认证通知怎么处理?微信小程序年审认证都需要哪些资料?

背景&#xff1a;近期部分微信小程序管理员最近收到了年审认证通知如下图 微信官方通知 微信小程序认证流程 第一步&#xff1a;登录微信公众平台 网址&#xff1a;微信公众平台 第二步&#xff1a;登录进入后会看到年审通知弹窗&#xff0c;点击去年审 第二步&#xff1a;登…

java中Random随机数使用和生成随机数的多个示例

在 Java 中&#xff0c;我们可以使用 java.util.Random 类生成伪随机数。伪随机数的特性是&#xff0c;虽然它们看起来是随机的&#xff0c;但实际上它们是由一个固定的算法生成的。只要我们提供相同的种子&#xff0c;这个算法就会生成相同的数字序列。 首先&#xff0c;我们…

HarmonyOS开发基础(一)

HarmonyOS开发基础&#xff08;一&#xff09; // &#xff1a;装饰器&#xff1a;用来装饰类结构、方法、变量 Entry // Entry&#xff1a;标记当前组件为入口组件 Component // Component&#xff1a;标记为自定义组件 // struct&#xff1a;自定义组件&#xff0c;可复用的…

winform使用串口通信读取压力传感装置(CFM)的数据

一、简介 目的&#xff1a;获取CFM的 “hi” 报文&#xff0c;解析出如下数据并绘制波形图。 实现&#xff1a;使用c#打开CFM串口&#xff0c;发送 02 00 02 4C 49 0D 请求到串口&#xff0c;CFM就会不断返回不同类型的报文&#xff0c;我解析的是 “hi” 报文&#xff08;至…

2477. 到达首都的最少油耗 : 逐步讲解最低油耗求解思路

题目描述 这是 LeetCode 上的 「2477. 到达首都的最少油耗」 &#xff0c;难度为 「中等」。 Tag : 「DFS」 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n - 1&#xff0c;且恰好有 n - 1 …

全网最新最牛的Appium自动化:Appium常用操作之TouchAction操作

TouchAction操作 Appium的辅助类&#xff0c;主要针对手势操作&#xff0c;比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中&#xff0c;然后将该链条传递给服务器。服务器接受到该链条后&#xff0c;解析各个动作&#xff0c;逐个执行。 TouchAction类支持的动…

解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’

解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’ 文章目录 解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景…