文件IO
代码
/*************************************************************************************** file name: 1.c* author : lu.ciana.598393@gmail.com* date : 2024/05/11* function : 利用系统IO读取磁盘上指定BMP图片的宽和高以及大小* note : none* CopyRight (c) 2024 lu.ciana.598393@gmail.com All Right Reserved*************************************************************************************/#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#pragma pack(1)
struct file_header{unsigned short file_type;//文件标识unsigned int file_size;//整个文件的大小unsigned short freserved1;//保留unsigned short freserved2;//保留unsigned int boffset_bits;//位图数据在文件中的偏移值
};
struct info_header {unsigned int bitmap_size;//位图信息的大小int bitmap_width;//位图宽度int bitmap_height;//位图高度unsigned short planes;//位图的位面数unsigned short image_depth;//位图的图像深度unsigned int compression;//位图压缩方式unsigned int image_size;//位图的数据大小int x_pels_permeter;//表示水平方向每米的像素点数量int y_pels_permeter;//表示垂直方向每米的像素点数量unsigned int color_used;//实际使用调色板的颜色数量unsigned int color_important;//重要的颜色数量
};#pragma pack()int main(int argc, char const *argv[])
{// int bmp_size = 0; //用于存储BMP图片的大小// int bmp_height = 0; //记录BMP图片的高// int bmp_width = 0; //记录BMP图片的宽//1.BMP图片的路径是通过命令行传递,所以需要检测参数有效性if (2 != argc){printf("argument is invaild\n");return -1;}//2.利用系统调用open()打开待读取数据的BMP图片 int bmp_fd = open(argv[1],O_RDWR);if ( -1 == bmp_fd){printf("open %s is error\n",argv[1]);return -1;}// //3.从被打开的BMP图片中读取图像信息// lseek(bmp_fd,2,SEEK_SET);// read(bmp_fd,&bmp_size,4); //读取BMP图片大小// lseek(bmp_fd,18,SEEK_SET);// read(bmp_fd,&bmp_width,4); //读取BMP图片的宽// lseek(bmp_fd,22,SEEK_SET);// read(bmp_fd,&bmp_height,4); //读取BMP图片的高struct file_header s1;struct info_header s2;read(bmp_fd,&s1,14);read(bmp_fd,&s2,40);//4.输出BMP信息printf("bmp name is %s ,width = %d,height = %d,size = %d\n",argv[1],s2.bitmap_width,s2.bitmap_height,s1.file_size);return 0;
}