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<time.h>
  10. FILE *fp,*fbmp,*flog;
  11. struct dirent *entry;
  12. struct stat statbuf;
  13. unsigned short BMP=0x4D42,
  14. JPG=0xD8FF,
  15. PNG[]={0x5089,0x474E,0x0A0D,0x0A1A},
  16. GIF[]={0x4947,0x3846,0x6139};
  17. char path1[],path2[],watchdog[],name[];
  18. struct tm *tm_ptr;
  19. time_t the_time;
  20.  
  21. //判断图片头文件的结构体
  22. typedef struct tagRGBQUAD
  23. {
  24. unsigned char Blue;// À¶É«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255)
  25. unsigned char Green; // ÂÌÉ«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255)
  26. unsigned char Red; // ºìÉ«µÄÁÁ¶È£šÖµ·¶Î§Îª0-255)
  27. unsigned char Reserved;// ±£Áô£¬±ØÐëΪ0
  28. } RGN;
  29.  
  30. void init()/*用于初始化程序*/
  31. {
  32. printf("file opened now\n");
  33. fp=fopen("wrg.text","w+");
  34. flog=fopen("wrlog.text","w+");
  35. fbmp=fopen("bmpname.text","w+");
  36. }
  37. void Exit()
  38. {
  39. printf("everything is gone\n");
  40. fclose(fp);
  41. fclose(fbmp);
  42. fclose(flog);
  43. }
  44. int istupian(char entry[])
  45. /*返加值为
  46. 1 bmp;
  47. 2 jpg;
  48. 3 png;
  49. 4 gif;
  50. */
  51. {
  52. FILE *fis;
  53. short int i=;
  54. unsigned short pis[];
  55. int flag=;//每次调用都进行初始化
  56. if((fis=fopen(entry,"r"))==NULL)
  57. printf("can not read %s\n",entry);
  58. fread(pis,,,fis);
  59.  
  60. if(pis[]==BMP)
  61. {
  62. flag=;
  63. printf("it is a bmp\n");
  64. }
  65. else if(pis[]==JPG)
  66. {
  67. flag=;
  68. printf("it is a jpg\n");
  69. }
  70. else if(PNG[]==pis[]&&PNG[]==pis[]&&PNG[]==pis[]&&PNG[]==pis[])
  71. {
  72. flag=;
  73. printf("it is a png\n");
  74. }
  75. else if(GIF[]==pis[]&&GIF[]==pis[]&&GIF[]==pis[])
  76. {
  77. flag=;
  78. printf("it is a gif\n");
  79. }
  80. return flag;
  81.  
  82. }
  83. void wrtlog()/*将文件的路径写入路径中*/
  84. {
  85. printf("write to wrtlg\n");
  86. fprintf(fp,"%s/%s\n",getcwd(NULL,),entry->d_name);
  87. fprintf(fbmp,"%s\n",entry->d_name);
  88. }
  89. void wrlog(char name[])// 将日记写入文件中
  90. {
  91. static int i=;
  92. (void)time(&the_time);
  93. //tm_ptr=gmtime(&the_time);
  94. if(i==) fprintf(flog,"文件名 /状态 /时间 /\n");
  95. ++i;
  96. fprintf(flog,"%s\t\t删除\t\t ",name);
  97.  
  98. fprintf(flog,"%s\n",ctime(&the_time));
  99. //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);
  100. }
  101. void printdir(char dir[])/*打印目录*/
  102. {
  103. DIR *dp;
  104. printf("printdir ******doing now\n");
  105. if((dp=opendir(dir))==NULL)
  106. {
  107. fprintf(stderr,"cannot open directory:%s\n",dir);
  108. return;
  109. }
  110. chdir(dir);
  111. while((entry=readdir(dp))!=NULL)
  112. {
  113. lstat(entry->d_name,&statbuf);
  114. if(S_ISDIR(statbuf.st_mode))
  115. {
  116. if(strcmp(".",entry->d_name)==||strcmp("..",entry->d_name)==)
  117. continue;
  118. printdir(entry->d_name);
  119. }
  120. else
  121. wrtlog();
  122. }
  123. chdir("..");
  124. closedir(dp);
  125. }
  126. int bmp(char filename[])
  127. {
  128. FILE *fo,*fin;
  129. RGN rgb,black={,,,},white={,,,};
  130. char name[]="\0";
  131. unsigned char temp[]="\0";
  132. unsigned int offset=;
  133. //在文件名中添加copy_来区别原文件
  134. int len=strlen(filename);
  135. strncpy(name,filename,len-);
  136. strcat(name,"_copy.bmp");
  137.  
  138. if((fo=fopen(filename,"rb"))==NULL)
  139. printf("can not open %s",filename);
  140. if((fin=fopen(name,"wb"))==NULL)
  141. printf("can not open %s",name);
  142. printf("œ«ÖžÕëÒƶ¯µœÎ»ÍŒÊýŸÝµÄÆðʌλÖÃ\n");
  143. fseek(fo,,);
  144. printf("¿ªÊŒ¶ÁÈ¡Æ«ÒÆÁ¿\n");
  145. fread(&offset,,,fo);
  146. printf("ÏÔÊŸÆ«ÒÆλÖÃŽóС:");
  147. printf("%X\n",offset);
  148. printf("œ«ÖžÕëÒƶ¯µœÍŒÆ¬µÄÆðʌλÖÃ\n");
  149. fseek(fo,,);
  150.  
  151. printf("¿ªÊŒÐŽÈëbmpÎÄŒþ\n");
  152. unsigned int i=;
  153. printf("Í·ÎÄŒþÐŽÈëÖÐ\n");
  154. while(i<=offset)
  155. {
  156. fread(temp,,,fo);
  157. fwrite(temp,,,fin);
  158. i+=;
  159. }
  160. printf("ÑÕɫת»»ÖÐ\n");
  161. while(!feof(fo))
  162. {
  163. fread(&rgb,,,fo);
  164. if((rgb.Blue+rgb.Green+rgb.Red)/<)
  165. fwrite(&black,,,fin);
  166. else
  167. fwrite(&white,,,fin);
  168. }
  169.  
  170. fclose(fo);
  171. fclose(fin);
  172. printf("͌Ƭת»»³ÉºÚ°×¶þֵ͌œáÊø");
  173. return ;
  174. }
  175. //硬连接
  176. /*返加值为
  177. 1 bmp;
  178. 2 jpg;
  179. 3 png;
  180. 4 gif;
  181. */
  182. void lkbmp()
  183. {
  184. fseek(fp,,);
  185. fseek(fbmp,,);
  186. while(fscanf(fp,"%s",path1)!=EOF&&fscanf(fbmp,"%s",name)!=EOF)
  187. {
  188. //path2 的路径已经初始化,将文件名接到path2中,链接好后,将watchsog重新载入watchdog中
  189. strcat(path2,name);
  190. printf("%s",path2);
  191. if(link(path1,path2)==)
  192. {
  193. printf(" link is successful\n");
  194. }
  195. else
  196. printf(" link is error\n");
  197. //恢复母路径
  198. if(istupian(path2)==)
  199. bmp(path2);
  200. strcpy(path2,watchdog);
  201. }
  202.  
  203. }
  204. //删除非图片文件
  205. void del_dir()
  206. {
  207. int picture=;
  208. fseek(fbmp,,);
  209. fseek(fp,,);
  210. if(fscanf(fbmp,"%s",name)==EOF)
  211. printf("del_dir is error");
  212. else while(fscanf(fp,"%s",path1)!=EOF&&fscanf(fbmp,"%s",name)!=EOF)
  213. {
  214. //path2 的路径已经初始化,将文件名接到path2中,链接好后,将watchsog重新载入watchdog中
  215. strcat(path2,name);
  216.  
  217. if(!(picture=istupian(path2))&&unlink(path2)==)
  218. {
  219. printf("unlink %s is successful\n",path2);
  220. wrlog(path2);
  221. }
  222. else
  223. printf("unlink %s is error\n",path2);
  224. //恢复母路径
  225. strcpy(path2,watchdog);
  226. }
  227.  
  228. }
  1. #include"myhead.h"
  2. #pragma pack(1)
  3. int main(int argc,char *argv[])
  4. {
  5. pid_t fork_res;
  6. char topdir[] = ".";
  7. if(argc>=)
  8. strcpy(topdir,argv[]);
  9.  
  10. printf("已经得到目录:\"%s\"\n",topdir);
  11. printf("初始化中");
  12. init();
  13. printf("初始化完毕\n");
  14. printf("start printdir\n");
  15. printf("进入原始路径,得到母路径。");
  16. chdir(topdir);
  17. chdir("..");
  18. strcpy(path2,getcwd(NULL,));
  19.  
  20. //创建D目录,可以以作为子进程
  21. strcat(path2,"/D/");
  22. mkdir(path2,);
  23. printf("母路径:%s\n",path2);
  24. strcpy(watchdog,path2);
  25.  
  26. printdir(topdir);
  27. //链接文件
  28. lkbmp();
  29. printf("done.\n");
  30. //退出
  31. //删除原文件
  32. del_dir();
  33. //进入D目录
  34. Exit();
  35.  
  36. printf("程序运行结束");
  37.  
  38. }

printdir-deldir-bmp的更多相关文章

  1. Android raw to bmp

    Android raw 格式转 bmp 图像 raw 保存的为裸数据,转换时都需要把它转成RGBA 的方式来显示.其中: 8位RAW: 四位RGBA 来表示一位灰度; 24位RAW: 三位RGB相同, ...

  2. 你所能用到的BMP格式介绍

    原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...

  3. Linux C语言解析并显示.bmp格式图片

    /************************* *bmp.h文件 *************************/ #ifndef __BMP_H__ #define __BMP_H__ # ...

  4. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

  5. Linux C语言解析.bmp格式图片并显示汉字

    bmp.h 文件 #ifndef __BMP_H__ #define __BMP_H__ #include <unistd.h> #include <stdio.h> #inc ...

  6. BMP图像差分/比较

    #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char ...

  7. Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

  8. 提取bmp图片的颜色信息,可直接framebuffer显示(c版本与python版本)

    稍微了解了下linux的framebuffer,这是一种很简单的显示接口,直接写入像素信息即可 配置好的内核,会有/dev/fbn 的接口,于是想能否提前生成一个文件,比如logo.fb,里面仅包含像 ...

  9. 【VC++技术杂谈006】截取电脑桌面并将其保存为bmp图片

    本文主要介绍如何截取电脑桌面并将其保存为bmp图片. 1. Bmp图像文件组成 Bmp是Windows操作系统中的标准图像文件格式. Bmp图像文件由四部分组成: (1)位图头文件数据结构,包含Bmp ...

  10. gif jpg bmp png的区别

    PNG格式图片因其高保真性.透明性及文件大小较小等特性,被广泛应用于网页设计.平面设计中.网络通讯中因受带宽制约,在保证图片清晰.逼真的前提下,网页中不可能大范围的使用文件较大的bmp.jpg格式文件 ...

随机推荐

  1. python用法——Mixin

    在读werkzeug和flask的源码中,经常能遇到类名中有mixin这个东西.这个东西的用法让我想到了java中的接口名有able的用法.今天我就来看了看这个mixin是什么东西. 学习了pytho ...

  2. LINUX下QT与C语言通过网卡名获取网卡IP与MAC

    1.QT下 QString RuntimeConfig::ipAddress(QString network) { QList<QNetworkAddressEntry> list; QS ...

  3. 两阶段提交及JTA

    两阶段提交及JTA 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或者提供事务语义的系统,如JMS)的事务.其实就是将对同一数据库事务的概念扩大到了对多个数据库的事务.目的是为了保 ...

  4. python 解释器内建函数001

    python解释器内建函数列表如下: 001.abs() 求绝对值 #!/usr/bin/python if __name__=="__main__": print(abs(-10 ...

  5. 一步一步学python(六) - 抽象

    1.string转数字 import  locale locale . atoi( str ) 2.创建函数 函数是可以调用(可能包含参数),执行某种行为并返回一个值 >>>impo ...

  6. linux之普通用户与root用户之间切换

  7. ngrok首页、文档和下载 - Web服务安全通道 - 开源中国社区

    ngrok首页.文档和下载 - Web服务安全通道 - 开源中国社区      Web服务安全通道 ngrok 编辑/纠错    分享到     新浪微博腾讯微博    已用    +0    收藏 ...

  8. 数组中出现次数超过一半的数字 -java

    数组中出现次数超过一半的数字 -java 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散列表的方式,也就是统计每个数组 ...

  9. C++中的动态类型与动态绑定、虚函数、运行时多态的实现

    动态类型与静态类型 静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型.静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变.通俗的讲,就是上下文无关,在编译时 ...

  10. java/struts/Servlet文件下载与ftp文件上传下载

    1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...