任務(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ù)量

//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)容。