Linux開(kāi)發(fā)_文件目錄操作介紹、創(chuàng)建BMP圖片

      網(wǎng)友投稿 928 2022-05-29

      任務(wù)1: 文件操作函數(shù)學(xué)習(xí)

      ? ?學(xué)習(xí)兩套函數(shù):

      (1) ?C語(yǔ)言下標(biāo)準(zhǔn)文件操作函數(shù)。fopen、fclose、fread、fwrite (適合操作普通文件)

      針對(duì)文件指針操作。

      (2) ?linux下專用的文件操作函數(shù)。open、close、read、write (適合操作設(shè)備文件、也可以操作普通文件)

      針對(duì)文件描述符操作。

      ? ?如何檢測(cè)文件是否讀取到結(jié)尾? 判斷讀函數(shù)的返回值。

      ? ?文件操作相關(guān)的練習(xí)作業(yè)

      1. ?(編碼)創(chuàng)建一張BMP圖片,顏色可以指定。

      2. ?模擬du命令,可以查看指定文件的大小,可以將文件大小打印出來(lái)。

      3. ?文件加密和解密。 密碼: 數(shù)字方式、字符串方式

      (1) ?加密方式: 異或加密

      擴(kuò)展: 加密方式: MD5加密

      擴(kuò)展作業(yè): 實(shí)現(xiàn)文件的壓縮和解壓,模擬tar命令。

      創(chuàng)建BMP圖片:

      #include #include /* 必須在結(jié)構(gòu)體定義之前使用,這是為了讓結(jié)構(gòu)體中各成員按1字節(jié)對(duì)齊 */ #pragma pack(1) /*需要文件信息頭:14個(gè)字節(jié) */ struct tagBITMAP_FILE_HEADER { unsigned short bfType; //保存圖片類似。 'BM' -- 0x4d42 unsigned int bfSize; //圖片的大小 unsigned short bfReserved1; unsigned short bfReserved2; unsigned int bfOffBits; //RGB數(shù)據(jù)偏移地址 }; /* 位圖參數(shù)信息 */ struct tagBITMAP_INFO_HEADER { unsigned long biSize; //結(jié)構(gòu)體大小 unsigned long biWidth; //寬度 unsigned long biHeight; //高度 unsigned short biPlanes; unsigned short biBitCount; //顏色位數(shù) unsigned long biCompression; unsigned long biSizeImage; unsigned long biXPelsPerMeter; unsigned long biYPelsPerMeter; unsigned long biClrUsed; unsigned long biClrImportant; }; /* 函數(shù)功能: 創(chuàng)建一張BMP圖片 函數(shù)參數(shù): char *name 文件名稱 int w 寬度 int h 高度 int c 顏色位數(shù) 函數(shù)返回值: 0表示成功 */ int CreateBmpImage(char *name,int w,int h,int c) { /*1. 創(chuàng)建文件*/ FILE *file=fopen(name,"wb"); if(file==NULL)return 1; /*2. 創(chuàng)建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. 創(chuàng)建BMP圖像參數(shù)信息*/ 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. 圖片顏色數(shù)據(jù)填充*/ int i,j; for(i=0;i\n"); return 0; } if(CreateBmpImage(argv[1],320,480,0xFF0033)) { printf("圖片創(chuàng)建失敗!\n"); } else { printf("圖片創(chuàng)建成功!\n"); } return 0; }

      BMP圖片練習(xí)文件操作(專題練習(xí)):

      1. ?BMP圖片數(shù)據(jù)取模,模擬圖片取模軟件。(選擇16位或者24位取模方式)

      2. ?BMP圖片放大縮小,根據(jù)輸入的尺寸放大縮小圖片。

      3. ?實(shí)現(xiàn)圖片4種翻轉(zhuǎn)效果: 上、下、左、右。

      文件系統(tǒng):

      1. ?文件系統(tǒng)本身就是一套上層(軟件層)算法,底層有與硬件交互的接口。

      硬件: 磁盤(pán)、U盤(pán)、SD卡 (扇區(qū))…….

      2. ?文件本身屬于一個(gè)容器,沒(méi)有規(guī)定存放什么類型的數(shù)據(jù)。

      3. ?文件指針(光標(biāo)位置),會(huì)隨著讀寫(xiě)函數(shù)移動(dòng)。

      4. ?文件讀寫(xiě)權(quán)限: 打開(kāi)文件需要選擇正確的權(quán)限。

      ? ?文件格式介紹:

      圖片: BMP、PNG、JPG/JPEG、GIF、ICO

      音頻/視頻: MP3、MP4

      文本: txt(字符串)

      文檔: doc

      ? ?Main函數(shù)傳遞參數(shù)

      #include

      int main(int argc,char **argv)

      {

      //argc :表示參數(shù)的數(shù)量

      Linux開(kāi)發(fā)_文件目錄操作介紹、創(chuàng)建BMP圖片

      //argv :二維指針,指向傳入的每一個(gè)字符串首地址

      int i;

      for(i=0;i

      {

      printf("argv[%d]=%s\n",i,argv[i]);

      }

      return 0;

      }

      目錄過(guò)濾:

      #include #include #include #include #include // ./app <.mp3> /* 函數(shù)功能: 輸出指定目錄下指定指定后綴的文件名稱+路徑 ./app /bmp/jpg/ .mp3 */ int PrintDirName(char *DirName,char *str) { /*1. 打開(kāi)目錄*/ DIR *dirp=opendir(DirName); if(dirp==NULL)return 1; /*2. 循環(huán)讀取目錄*/ 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. 關(guān)閉目錄*/ closedir(dirp); return 0; } int main(int argc,char **argv) { if(argc!=3) { printf("./app <.mp3>\n"); return 0; } PrintDirName(argv[1],argv[2]); return 0; }

      任務(wù)2: 目錄相關(guān)操作函數(shù)

      創(chuàng)建目錄、打開(kāi)目錄、讀取目錄。

      ? ?需求: 獲取指定目錄下指定后綴的所有文件,并且輸出每個(gè)文件的路徑信息。

      作業(yè): 拷貝目錄下所有文件(指定后綴的文件)到指定目錄下,考慮一層目錄。

      擴(kuò)展: 遞歸拷貝,考慮多層目錄。

      任務(wù)3: Makefile文件

      作業(yè):

      1. ?使用Makefile建立工程,只需要寫(xiě)一個(gè)Makefile文件。

      2. ?使用Makefile建立工程,每個(gè)目錄下就寫(xiě)一個(gè)Makefile文件。

      app:print.o main.o sum.o gcc main.o print.o sum.o -o app print.o:print.c gcc print.c -c main.o:main.c gcc main.c -c sum.o:sum.c gcc sum.c -c clean: rm app *.o -f

      Linux Makefile

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:學(xué)習(xí)索引結(jié)構(gòu)的一些案例——Jeff Dean在SystemML會(huì)議上發(fā)布的論文(中)
      下一篇:【技術(shù)補(bǔ)給站】第7期:20個(gè)超實(shí)用API應(yīng)用案例,開(kāi)啟API進(jìn)階之路(內(nèi)附資料下載)
      相關(guān)文章
      亚洲第一区精品观看| 红杏亚洲影院一区二区三区| 亚洲欧洲国产日韩精品| 亚洲一区中文字幕在线观看| 亚洲精品无码日韩国产不卡av| 国产亚洲人成无码网在线观看| 亚洲熟妇无码av另类vr影视| 亚洲国产a级视频| 另类图片亚洲校园小说区| 亚洲色图黄色小说| 亚洲国产精品毛片av不卡在线 | 亚洲成人影院在线观看| 日韩在线视精品在亚洲| 亚洲熟女综合色一区二区三区| 国产99在线|亚洲| 久久伊人久久亚洲综合| 理论亚洲区美一区二区三区| 亚洲制服丝袜一区二区三区| 亚洲AV无码成人专区片在线观看| 亚洲 自拍 另类小说综合图区| 亚洲男人的天堂一区二区| 久久亚洲AV无码西西人体| 中文字幕亚洲综合久久男男| 国产精品亚洲а∨无码播放| 亚洲日韩在线中文字幕第一页 | 亚洲一卡2卡三卡4卡无卡下载 | 亚洲电影免费在线观看| 亚洲视频精品在线观看| 亚洲av永久无码精品表情包| 亚洲AV无码第一区二区三区 | 日韩欧美亚洲国产精品字幕久久久 | 久久精品国产亚洲av品善| www国产亚洲精品久久久| 亚洲人成小说网站色| 亚洲精品偷拍无码不卡av| 亚洲mv国产精品mv日本mv| 亚洲国产综合AV在线观看| 亚洲AV无码成H人在线观看| 亚洲中文字幕在线第六区| 亚洲偷自拍拍综合网| 亚洲av中文无码乱人伦在线咪咕|