国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux項目一

2024-06-28 13:28:04
字體:
來源:轉載
供稿:網友
linux項目一

Linux項目一

引言:

  這是我去年做的東西,一直沒有時間整理,今天又要做一個基于這個項目的客戶端與服務器版本。

  以前我寫的庫文件中的函數耦合度很大,在一個函數中調用另一個函數,導致一無法拆開使用!

  因此,我對以前寫的庫進行接口的更改,以更好的適應更多的項目。

  當然我也把以前寫的小程序貼出來,以供大家參考!

需求:

  1.搜索bmp圖片轉換成黑白圖片復制到另一個文件中

  2.系統為Linux

自定義功能函數:

  1.打印目錄:

 1 #include<unistd.h> 2 #include<stdio.h> 3 #include<dirent.h> 4 #include<string.h> 5 #include<sys/stat.h> 6 #include<stdlib.h> 7 void PRintdir(char *dir,int depth)/*打印目錄*/ 8 { 9     DIR *dp;10     struct dirent *entry;11     struct stat statbuf;12 13     if((dp=opendir(dir))==NULL)14     {15         fprintf(stderr,"cannot open directory:%s/n",dir);16         return;17     }18     chdir(dir);19     while((entry=readdir(dp))!=NULL)20     {21         lstat(entry->d_name,&statbuf);/**獲取文件信息,保存在statbuf**/22         if(S_ISDIR(statbuf.st_mode))/***判斷是否為目錄***/23         {24             if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)25                 continue;26             printf("%*s%s//n",depth," ",entry->d_name);27             printdir(entry->d_name,depth+4);28         }29         else30              printf("%*s%s//n",depth," ",entry->d_name);/***為文件***/31     }32     chdir("..");33     closedir(dp);34 }

  2.刪除文件:

1 #include<unistd.h>2 void del_file(const char *filename)3 {4     unlink(filename);5     return 1;6 }

  3.復制文件:

#include<unistd.h>void lkbmp(const char *source,const char *target){    if(link(source,target)==0)      printf(" link is successful/n");    else    printf(" link is error/n");}

  4.對彩色圖片轉換成黑白圖片

#include<stdio.h>#include<string.h>int bmp(char filename[]){    FILE *fo,*fin;    RGN rgb,black={0,0,0,0},white={255,255,255,0};    char name[256]="/0";    unsigned char temp[14]="/0";    unsigned int offset=0;    /***在文件名中添加copy_來區別原文件***/    int len=strlen(filename);    strncpy(name,filename,len-4);    strcat(name,"_copy.bmp");    if((fo=fopen(filename,"rb+"))==NULL)        printf("can not open %s",filename);    if((fin=fopen(name,"wb+"))==NULL)        printf("can not open %s",name);    fseek(fo,10,0);    fread(&offset,4,1,fo);    printf("%X/n",offset);    fseek(fo,0,0);    unsigned int i=1;    while(i<=offset)    {        fread(temp,1,1,fo);        fwrite(temp,1,1,fin);        i+=1;    }    while(!feof(fo))    {        fread(&rgb,4,1,fo);        if((rgb.Blue+rgb.Green+rgb.Red)/3<125)            fwrite(&black,4,1,fin);        else            fwrite(&white,4,1,fin);    }    fclose(fo);    fclose(fin);    return 0;}

完整自定義庫文件:

  1 #include<unistd.h>  2 #include<stdio.h>  3 #include<dirent.h>  4 #include<string.h>  5 #include<stdlib.h>  6 #include<sys/stat.h>  7 #include<sys/types.h>  8 #include<sys/wait.h>  9 #include<stdlib.h> 10 #include<time.h> 11 #include <sys/msg.h> 12 FILE *fp,*fbmp,*flog; 13 struct dirent *entry; 14 struct stat statbuf; 15 unsigned short  BMP=0x4D42, 16             JPG=0xD8FF, 17         PNG[4]={0x5089,0x474E,0x0A0D,0x0A1A}, 18         GIF[3]={0x4947,0x3846,0x6139}; 19 static char path1[256],path2[256],watchdog[256],name[256]; 20 struct tm *tm_ptr; 21 time_t the_time; 22  23 //判斷圖片頭文件的結構體 24 typedef struct tagRGBQUAD 25 { 26 unsigned char Blue;// À¶É«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255) 27 unsigned char Green; // ÂÌÉ«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255) 28 unsigned char Red; // ºìÉ«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255) 29 unsigned char Reserved;// ±£Áô£¬±ØÐëΪ0 30 } RGN; 31  32 void init()/*用于初始化程序*/ 33 { 34     printf("file opened now/n"); 35     fp=fopen("wrg.text","w+"); 36     flog=fopen("wrlog.text","w+"); 37     fbmp=fopen("bmpname.text","w+"); 38 } 39 void Exit() 40 { 41     printf("everything is gone/n"); 42     fclose(fp); 43     fclose(fbmp); 44     fclose(flog); 45 } 46 int istupian(char entry[]) 47 /*返加值為 48 1 bmp; 49 2 jpg; 50 3 png; 51 4 gif; 52 */ 53 { 54     FILE *fis; 55     short int i=0; 56     unsigned short pis[5]; 57     int flag=0;//每次調用都進行初始化 58     if((fis=fopen(entry,"r"))==NULL) 59         printf("can not read %s/n",entry); 60     fread(pis,8,1,fis); 61  62     if(pis[0]==BMP) 63     { 64         flag=1; 65         printf("it is a bmp/n"); 66     } 67     else if(pis[0]==JPG) 68     { 69         flag=2; 70         printf("it is a jpg/n"); 71     } 72     else if(PNG[0]==pis[0]&&PNG[1]==pis[1]&&PNG[2]==pis[2]&&PNG[3]==pis[3]) 73     { 74         flag=3; 75         printf("it is a png/n"); 76     } 77     else if(GIF[0]==pis[0]&&GIF[1]==pis[1]&&GIF[2]==pis[2]) 78     { 79         flag=4; 80         printf("it is a gif/n"); 81     } 82     return flag; 83  84  85 } 86 void wrtlog()/*將文件的路徑寫入路徑中*/ 87 { 88     printf("write to wrtlg/n"); 89     fprintf(fp,"%s/%s/n",getcwd(NULL,1024),entry->d_name); 90     fprintf(fbmp,"%s/n",entry->d_name); 91 } 92 void wrlog(char name[])//  將日記寫入文件中 93 { 94   static int i=0; 95   (void)time(&the_time); 96   //tm_ptr=gmtime(&the_time); 97   if(i==0) fprintf(flog,"文件名                    /狀態            /時間            //n"); 98   ++i; 99   fprintf(flog,"%s/t/t刪除/t/t ",name);100 101   fprintf(flog,"%s/n",ctime(&the_time));102   //fprintf(flog,"%02d:%02d:%02d:%02d:%02d:%02d/n",tm_ptr->tm_year,tm_ptr->tm_mon+1,tm_ptr->tm_mday,tm_ptr->tm_hour,tm_ptr->tm_min,tm_ptr->tm_sec);103 }104 void printdir(char dir[])/*打印目錄*/105 {106     DIR *dp;107         printf("printdir ******doing now/n");108     if((dp=opendir(dir))==NULL)109     {110         fprintf(stderr,"cannot open directory:%s/n",dir);111         return;112     }113     chdir(dir);114     while((entry=readdir(dp))!=NULL)115     {116         lstat(entry->d_name,&statbuf);117         if(S_ISDIR(statbuf.st_mode))118         {119             if(strcmp(".",entry->d_name)==0||strcmp("..",entry->d_name)==0)120                 continue;121             printdir(entry->d_name);122         }123         else124             wrtlog();125     }126     chdir("..");127     closedir(dp);128 }129 int bmp(char filename[])130 {131     FILE *fo,*fin;132     RGN rgb,black={0,0,0,0},white={255,255,255,0};133     char name[256]="/0";134     unsigned char temp[14]="/0";135     unsigned int offset=0;136     /***在文件名中添加copy_來區別原文件***/137     int len=strlen(filename);138     strncpy(name,filename,len-4);139     strcat(name,"_copy.bmp");140 141     if((fo=fopen(filename,"rb+"))==NULL)142         printf("can not open %s",filename);143     if((fin=fopen(name,"wb+"))==NULL)144         printf("can not open %s",name);145     fseek(fo,10,0);146     fread(&offset,4,1,fo);147     printf("%X/n",offset);148     fseek(fo,0,0);149     unsigned int i=1;150     while(i<=offset)151     {152         fread(temp,1,1,fo);153         fwrite(temp,1,1,fin);154         i+=1;155     }156     while(!feof(fo))157     {158         fread(&rgb,4,1,fo);159         if((rgb.Blue+rgb.Green+rgb.Red)/3<125)160             fwrite(&black,4,1,fin);161         else162             fwrite(&white,4,1,fin);163     }164 165     fclose(fo);166     fclose(fin);167     return 0;168 }169 //硬連接170 /*返加值為171 1 bmp;172 2 jpg;173 3 png;174 4 gif;175 */176 void lkbmp()177 {178   fseek(fp,0,0);179   fseek(fbmp,0,0);180   while(fscanf(fp,"%s",path1)!=EOF&&fscanf(fbmp,"%s",name)!=EOF)181   {182     /***path2 的路徑已經初始化,將文件名接到path2中,鏈接好后,將watchsog重新載入watchdog中***/183     strcat(path2,name);184     printf("%s",path2);185     if(link(path1,path2)==0)186     {187       printf(" link is successful/n");188     }189       else190     printf(" link is error/n");191       //恢復母路徑192       if(istupian(path2)==1)193     bmp(path2);194       strcpy(path2,watchdog);195   }196 197 }198 //刪除非圖片文件199 int del_dir()200 {201   fseek(fp,0,0);202   fseek(fbmp,0,0);203   while(fscanf(fbmp,"%s",name)!=EOF)204   {205     //path2 的路徑已經初始化,將文件名接到path2中,鏈接好后,將watchsog重新載入watchdog中206     strcat(path2,name);207     if(!istupian(path2)&&unlink(path2)==0)208       {unlink(path2);209         printf("unlink %s is successful/n",path2);210         wrlog(path2);211       }212     else213       printf("unlink %s is error/n",path2);214           //恢復母路徑215     strcpy(path2,watchdog);216   }217   return 1;218 219 }

對應的執行文件:

 1 #include"myhead.h" 2 #pragma pack(2) 3 int main(int argc,char *argv[]) 4 { 5     char topdir[128] = "."; 6         if(argc>=2) 7         strcpy(topdir,argv[1]); 8         printf("已經得到目錄:/"%s/"/n",topdir); 9         printf("初始化中");10         init();11         printf("初始化完畢/n");12         printf("start printdir/n");13         printf("進入原始路徑,得到母路徑。");14         chdir(topdir);15         chdir("..");16         strcpy(path2,getcwd(NULL,1024));17             //創建D目錄,可以以作為子進程18           strcat(path2,"/D/");19           mkdir(path2,0770);20           printf("母路徑:%s/n",path2);21           strcpy(watchdog,path2);22     pid_t fork_res;23     fork_res=fork();24       if(fork_res==0)25       {26           printf("Child now/n");27         while(del_dir()!=1);28         printf("del_dir done./n");29           return 1;30       }31       else if(fork_res>0)32       { 33           printdir(topdir);34           printf("printdir done./n");35           lkbmp();36           printf("lkbmp done/n");37           del_dir();38       return 0 ;39       }40       else  41       { perror("fork failed");42           exit(1);43       }44      45     46     47     printf("程序運行結束");  48     exit(0);49 }

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 姚安县| 娱乐| 海林市| 临武县| 买车| 西城区| 濮阳县| 大姚县| 渭源县| 前郭尔| 奈曼旗| 无棣县| 海南省| 巨野县| 宁河县| 沿河| 马龙县| 灯塔市| 银川市| 河曲县| 墨江| 汕头市| 克拉玛依市| 鄯善县| 高青县| 武鸣县| 抚远县| 凉山| 德格县| 会泽县| 宁都县| 保德县| 江安县| 兴国县| 子长县| 桑植县| 潼关县| 太原市| 桐柏县| 阳山县| 都江堰市|