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 ptrDIR *dptr = NULL;//2.open directoryif( (dptr=opendir("./") )==NULL ){perror("opendir error ");}//3. define file ptrstruct 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 typeswitch (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 accessint 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.mzph.cn/news/199724.shtml

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

相关文章

通过pipeline配置sonar自动化实现过程解析

这篇文章主要介绍了通过pipeline配置sonar自动化实现过程解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.sonar配置webhooks&#xff0c; 2.url填写jenkins的地址&#xff1a;http://jenkinsurl/sonarqu…

高低压供配电智能监控系统

高低压供配电智能监控系统是一种综合运用物联网、云计算、大数据和人工智能等技术的智能化监控系统&#xff0c;用于实时监测高低压供配电设备的运行状态和电能质量&#xff0c;及时发现和处理供配电系统中存在的问题&#xff0c;提高供配电系统的安全性和可靠性。依托电易云-智…

JavaScript 数组

JavaScript 数组 用来存储一系列相关数据的一种数据类型 创建数组 字面量方式 ----- [1,2,3,4,5,6];实例化构造函数 ----- new Array(1,2,3,4,5,6);组成数组的元素可以是任意的数据类型包括数组本身&#xff1b; new Array(n): n 表示数组的长度 内容操作 获取&#xff08;查…

LLM之Agent(四)| AgentGPT:一个在浏览器运行的Agent

AgentGPT是一个自主人工智能Agent平台&#xff0c;用户只需要为Agent指定一个名称和目标&#xff0c;就可以在浏览器中链接大型语言模型&#xff08;如GPT-4&#xff09;来创建和部署Agent平台。 PS&#xff1a;目前agentGPT仅支持chatgpt模型&#xff0c;暂时不支持本地llm模…

怎么让CMake不使用VS作为构建工具,而是使用gcc

2023年12月5日&#xff0c;周二晚上 要让 CMake 使用 gcc 而不是 Visual Studio 作为构建工具&#xff0c;可以通过指定生成器来告诉 CMake 使用 gcc。 在运行 cmake 命令时&#xff0c;可以使用 -G 参数来指定生成器。 对于 gcc&#xff0c;可以使用 "Unix Makefiles&q…

调查显示 IT 服务事件越来越频繁

事件管理平台提供商 Transposit 对美国 1,000 名 IT 运营、DevOps、站点可靠性工程 (SRE) 和平台工程专业人士进行的一项调查发现&#xff0c;超过三分之二 (67%) 的人发现故障率有所增加过去 12 个月中影响客户的服务事件的频率。 今天在Kubecon CloudNative会议上宣布的调查…

102.套接字-Socket网络编程4(TCP通信流程)

目录 TCP编程流程 套接字函数 1.创建套接字 2.绑定地址 3.监听连接请求 4.接受连接 5. 连接到服务器 6. 发送数据 7. 接收数据 8.关闭套接字 服务器端通信流程 示例代码 客户端通信流程 代码示例 TCP编程流程 TCP是一个面向连接的&#xff0c;安全的&#xff0c;流…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中泛型技术体系的原理和实战开发指南

深入探索Java特性中泛型技术体系的原理和实战开发指南 前提介绍泛型的介绍泛型带来的好处泛型引发的问题错觉&#xff1a;泛型也可以实现多态 泛型的特点类型擦除概念定义案例分析隐患问题开发要点类型擦除的过程案例代码 实例分析类型转换问题 通配符与上下界通配符List<Ob…

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

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

美股电动汽车股票分析:蔚来和Rivian这两只都遭受了重创的股票,哪个更值得投资?

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 Rivian(RIVN)和蔚来(NIO)都是目前美股市场上最受关注的电动汽车股票。虽然蔚来在全球最大的电动汽车市场中国扮演着重要角色&#xff0c;但Rivian也击败了很多传统汽车制造商&#xff0c;并成为了第一家在美国推出全电动皮…

github可访问但无法clone问题

github可访问但无法clone问题 重置 http.proxy 重置 http.proxy git config --global http.proxy http://127.0.0.1:1080 git config --global https.proxy https://127.0.0.1:1080 git config --global --unset http.proxy git config --global --unset https.proxy

MongoDB的学习记录

目录 MongoDB是什么MongoDB为什么存在MongoDB怎么用MongoDB解决什么MongoDB指令开发使用的mongoose模块讲解请看这篇文章 MongoDB是什么 MongoDB是一种开源的、面向文档的NoSQL数据库管理系统。它使用JSON格式来存储数据&#xff0c;具有高可扩展性、高性能、高可用性等特点&a…

css设置渐变色

css如何设置自定义渐变色&#xff1f;线性渐变篇 CSS渐变可以让你在两个或多个指定颜色之间显示平滑的过渡。 CSS定义了三种渐变类型: Linear Gradients (goes down/up/left/right/diagonally) 下降/ 上升/左/右/对角线Radial Gradients (defined by their center) 由中心定…

Python内置函数 — super

1、super() 是一个Python内置函数&#xff0c;用于调用父类的方法。通过调用super()返回的对象的方法&#xff0c;可以在子类中访问父类的属性和方法&#xff0c;并在需要的情况下进行扩展或修改。 super()函数的一般语法是super().method()&#xff0c;其中method是父类中的…

WeakMap

WeakMap简介 作为es6一种新的数据结构&#xff0c;他是一种键值对的集合。与Map最大的区别有两个 1. 是其中的键必须是对象或非全局注册的符号。 全局注册的符号 const s1 Symbol.for(mySymbol) 非全局注册的符号 const s1 Symbol(mySymbol)了解Symbol.for 2. 不会创建对它…

黑苹果之机箱篇

上一篇写过关于配置的总的文章&#xff0c;今天咱们来聊一下机箱的选择 关于机箱的选择主要是尺寸和功能了 一、尺寸 电脑主机机箱尺寸因品牌、型号不同而异&#xff0c;常见的机箱尺寸有以下几种&#xff1a; 1. ATX机箱尺寸&#xff1a;长约44.5cm&#xff0c;宽约20.5cm&…

Example: use raspberry pi 4 control multiple motors(tb660)

abstract This is a project for controlling multiple motors by using joystick, the buttons’ information can be obtained from topic “/joystick”. We got the sensor’s signals from arduino, and sent the command from topic “joystick”. raspberry pi code(p…

在Docker容器中启用SSH服务,实现外部访问的详细教程

目录 步骤 1: 安装 SSH 服务器 步骤 2: 配置 SSH 服务器 步骤 3: 设置 SSH 用户 步骤 4: 重启 SSH 服务器 步骤 5: 映射容器端口 步骤 6: 使用 SSH 连接到容器 要在Docker容器中启用SSH服务&#xff0c;以便从外部访问&#xff0c;您需要执行以下步骤&#xff1a; 步骤 …

面试就是这么简单,offer拿到手软(三)—— 常见中间件框架面试题,es,redis,dubbo,zookeeper kafka 等

面试就是这么简单&#xff0c;offer拿到手软&#xff08;一&#xff09;—— 常见非技术问题回答思路 面试就是这么简单&#xff0c;offer拿到手软&#xff08;二&#xff09;—— 常见65道非技术面试问题 面试就是这么简单&#xff0c;offer拿到手软&#xff08;三&#xff…

python-ATM机

编写程序&#xff0c;实现一个具有开户、查询、取款、存款、转账、锁定、解锁、退出功能的银行管理系统。 结果展示 1.Main主方法 from zzjmxy.class7.atm import ATM from zzjmxy.class7.manager import Manager # 主面板&#xff0c;实现主要逻辑if __name__"__main__…