Linux开发_文件目录操作介绍、创建BMP图片

【摘要】 介绍c语言文件编程,创建bmp图片,bmp图片结构介绍,介绍目录接口编程,makefile知识点。
任务1: 文件操作函数学习 ​ 学习两套函数:
(1)​ c语言下标准文件操作函数。fopen、fclose、fread、fwrite (适合操作普通文件)
针对文件指针操作。
(2)​ linux下专用的文件操作函数。open、close、read、write (适合操作设备文件、也可以操作普通文件)
针对文件描述符操作。
​ 如何检测文件是否读取到结尾? 判断读函数的返回值。
​ 文件操作相关的练习作业
1.​ (编码)创建一张bmp图片,颜色可以指定。
2.​ 模拟du命令,可以查看指定文件的大小,可以将文件大小打印出来。
3.​ 文件加密和解密。 密码: 数字方式、字符串方式
(1)​ 加密方式: 异或加密
扩展: 加密方式: md5加密
扩展作业: 实现文件的压缩和解压,模拟tar命令。
创建bmp图片:
#include #include /* 必须在结构体定义之前使用,这是为了让结构体中各成员按1字节对齐 */#pragma pack(1)/*需要文件信息头:14个字节 */struct tagbitmap_file_header{ unsigned short bftype; //保存图片类似。 'bm' -- 0x4d42 unsigned int bfsize; //图片的大小 unsigned short bfreserved1; unsigned short bfreserved2; unsigned int bfoffbits; //rgb数据偏移地址};/* 位图参数信息 */struct tagbitmap_info_header { unsigned long bisize; //结构体大小 unsigned long biwidth; //宽度 unsigned long biheight; //高度 unsigned short biplanes; unsigned short bibitcount; //颜色位数 unsigned long bicompression; unsigned long bisizeimage; unsigned long bixpelspermeter; unsigned long biypelspermeter; unsigned long biclrused; unsigned long biclrimportant;};/*函数功能: 创建一张bmp图片函数参数: char *name 文件名称 int w 宽度 int h 高度 int c 颜色位数函数返回值: 0表示成功*/int createbmpimage(char *name,int w,int h,int c){ /*1. 创建文件*/ file *file=fopen(name,wb); if(file==null)return 1; /*2. 创建bmp文件头*/ struct tagbitmap_file_header head; memset(&head,0,sizeof(struct tagbitmap_file_header)); head.bftype=0x4d42; //bmp图片的类型 head.bfsize=sizeof(struct tagbitmap_file_header)+sizeof(struct tagbitmap_info_header)+w*h*3; head.bfoffbits=sizeof(struct tagbitmap_file_header)+sizeof(struct tagbitmap_info_header); if(fwrite(&head,1,sizeof(struct tagbitmap_file_header),file)!=sizeof(struct tagbitmap_file_header)) { return 2; } /*3. 创建bmp图像参数信息*/ struct tagbitmap_info_header info; memset(&info,0,sizeof(struct tagbitmap_info_header)); info.bisize=sizeof(struct tagbitmap_info_header); info.biwidth=w; info.biheight=h; info.bibitcount=24; info.biplanes=1; if(fwrite(&info,1,sizeof(struct tagbitmap_info_header),file)!=sizeof(struct tagbitmap_info_header)) { return 3; } /*4. 图片颜色数据填充*/ int i,j; for(i=0;i;i++)> bmp图片练习文件操作(专题练习):
1.​ bmp图片数据取模,模拟图片取模软件。(选择16位或者24位取模方式)
2.​ bmp图片放大缩小,根据输入的尺寸放大缩小图片。
3.​ 实现图片4种翻转效果: 上、下、左、右。
文件系统:
1.​ 文件系统本身就是一套上层(软件层)算法,底层有与硬件交互的接口。
硬件: 磁盘、u盘、sd卡 (扇区)…….
2.​ 文件本身属于一个容器,没有规定存放什么类型的数据。
3.​ 文件指针(光标位置),会随着读写函数移动。
4.​ 文件读写权限: 打开文件需要选择正确的权限。
​ 文件格式介绍:
图片: bmp、png、jpg/jpeg、gif、ico
音频/视频: mp3、mp4
文本: txt(字符串)
文档: doc
​ main函数传递参数
#include
int main(int argc,char **argv)
{
//argc :表示参数的数量
//argv :二维指针,指向传入的每一个字符串首地址
int i;
for(i=0;i;i++)
{
printf(argv[%d]=%s\n,i,argv[i]);
}
return 0;
}
目录过滤:
#include #include #include #include #include // ./app /*函数功能: 输出指定目录下指定指定后缀的文件名称+路径./app /bmp/jpg/ .mp3*/int printdirname(char *dirname,char *str){ /*1. 打开目录*/ dir *dirp=opendir(dirname); if(dirp==null)return 1; /*2. 循环读取目录*/ struct dirent *file_p=null; char *findstr=null; char *addr_p=null; //存放最终完整的文件名称 while(file_p=readdir(dirp)) { char *findstr=strstr(file_p->d_name,str); if(findstr)//123.mp3 123.mp3.mp4 123.mp3.txt { //比较后缀 if(strcmp(findstr,str)==0) { addr_p=malloc(strlen(dirname)+strlen(file_p->d_name)+1); strcpy(addr_p,dirname); //拼接目录 strcat(addr_p,file_p->d_name);//拼接文件名称 printf(文件完整路径=%s\n,addr_p); free(addr_p); //释放空间 } } } /*3. 关闭目录*/ closedir(dirp); return 0;}int main(int argc,char **argv){ if(argc!=3) { printf(./app \n); return 0; } printdirname(argv[1],argv[2]); return 0;} 任务2: 目录相关操作函数 创建目录、打开目录、读取目录。
​ 需求: 获取指定目录下指定后缀的所有文件,并且输出每个文件的路径信息。
作业: 拷贝目录下所有文件(指定后缀的文件)到指定目录下,考虑一层目录。
扩展: 递归拷贝,考虑多层目录。
任务3: makefile文件 作业:
1.​ 使用makefile建立工程,只需要写一个makefile文件。
2.​ 使用makefile建立工程,每个目录下就写一个makefile文件。
app:print.o main.o sum.o gcc main.o print.o sum.o -o appprint.o:print.c gcc print.c -cmain.o:main.c gcc main.c -csum.o:sum.c gcc sum.c -cclean: rm app *.o -f;i++)>
2021 OPPO开发者大会时间地点
丽清桃园观音新厂预估明年5月起大批量产 大陆LED头灯透率获快速提升
如何利用振荡电路频率调制实现室温长波红外探测与成像?
低配荣耀8来袭 舍弃双摄或将售价1499
在LabVIEW中调用OpenVINO™ 模型
Linux开发_文件目录操作介绍、创建BMP图片
简单上云第一步的华为云服务器,助力中小企业提升业务
百度Apollo2.5全球首发:比亚迪成第100位合作伙伴,进一步提升自动驾驶安全性
龙芯3A5000高端控制器亮相第13届中国国际机器人高峰论坛
miui和flyme是国产最强系统?
AI大模型加持!人形机器人、四足机器狗显身
以换代修政策:iPad 4坏了没关系,直接给你换一台新的iPad Air2
炭黑含量测试仪:测定材料中炭黑含量的关键仪器
PCB走线过孔影响电流承载能力因素分析
电缆故障测试仪FB18的应用广泛,作用非常之大
LoRa模块LoRa1280通讯距离测试
无线通信究竟如何传得更远?
自己动手制作路由器2.4G定向天线
雅克科技称明年是半导体材料技术迭代的关键时间点
ARM派系CPU国产化的现状和进展如何