免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1018 | 回复: 0
打印 上一主题 下一主题

[学习分享] Linux 下读取目录下文件,并将文件信息写入mysql数据库 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-17 10:44 |只看该作者 |倒序浏览

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <sys/stat.h>
  5. #include <sys/types.h>
  6. #include <stdlib.h>
  7. #include <errno.h>
  8. #include <fcntl.h>
  9. #include <dirent.h>
  10. #include <pwd.h>
  11. #include <time.h>
  12. #include <grp.h>
  13. #include <mysql/mysql.h>
  14. #define N 7
  15. MYSQL my_sql;
  16. DIR * my_dir = NULL;
  17. char *args[N] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL};
  18. void read_dir(char *);
  19. void connect_mysql();
  20. void set_work();
  21. void get_file_infor(const char *,char *);
  22. void write_mysql();
  23. int main(int argc,char *argv[])
  24. {
  25.     if(argc != 2)
  26.     {
  27.         fprintf(stderr,"arguments is not two!\n");
  28.         return -1;
  29.     }else
  30.     {
  31.         connect_mysql();
  32.         set_work();
  33.         read_dir(argv[1]);
  34.     }
  35.     mysql_close(&my_sql);
  36.     return EXIT_SUCCESS;
  37. }

  38. void read_dir(char *dirname)
  39. {
  40.     struct dirent * dir;
  41.     int n = 0;
  42.     my_dir = opendir(dirname);
  43.     if(!my_dir)
  44.     {
  45.         fprintf(stderr,"open dir fail %s\n",strerror(errno));
  46.     }else
  47.     {
  48.          
  49.         while((dir = readdir(my_dir)))
  50.         {
  51.             if(strcmp(".",dir->d_name)&&strcmp("..",dir->d_name))
  52.             {
  53.                 for(;n < N;n++)
  54.                 {
  55.                     args[n] = (char *)malloc(256);
  56.                     if(!args[n])
  57.                     {
  58.                         fprintf(stderr,"malloc fail\n");
  59.                         closedir(my_dir);
  60.                         exit(-1);
  61.                     }
  62.                 }
  63.                 args[0] = dir->d_name;
  64.                 get_file_infor(dir->d_name,dirname);
  65.                 printf("\n");
  66.             }
  67.          
  68.         }

  69.      
  70.     }
  71. }

  72. void connect_mysql()
  73. {
  74.     mysql_init(&my_sql);
  75.     if(mysql_real_connect(&my_sql,"localhost","ma","123456ma",
  76.                             "student",0,0,0))
  77.     {
  78.         printf("connect mysql success\n");
  79.     }else{
  80.         fprintf(stderr,"connect mysql fail %s",mysql_error(&my_sql));
  81.         exit(-1);
  82.     }
  83. }

  84. void set_work()
  85. {
  86.     int res1,res2;
  87.     res1 =mysql_query(&my_sql,"set names utf8");
  88.     res2 = mysql_query(&my_sql,"use student");
  89.     if(res1)
  90.     {
  91.         fprintf(stderr,"set character fail! %s\n",mysql_error(&my_sql));
  92.     }else
  93.            printf("set character success !\n");
  94.     if(res2)
  95.     {
  96.         fprintf(stderr,"use student database fail ! %s\n",mysql_error(&my_sql));
  97.     }else
  98.            printf("use database success !\n");

  99. }

  100. void write_mysql()
  101. {
  102.     printf("\t#######start write into mysql#######\n");
  103.     int res ;
  104.     char * infor = (char *)malloc(512);
  105.     memset(infor,0,512);
  106.     sprintf(infor,"INSERT INTO File(filename,filemode,filelink,fileown,filegroup,filetime,filesize) VALUES ('%s','%s',%s,'%s','%s','%s',%s)",args[0],args[1],args[2],args[3],args[4],args[5],args[6]);
  107.     infor[strlen(infor)] = '\0';
  108. //  printf("%s\n",infor);
  109.     res = mysql_query(&my_sql,infor);
  110.     if(!res)
  111.            printf("Insert %lu rows\n",(unsigned long)mysql_affected_rows(&my_sql));
  112.     else
  113.            fprintf(stderr,"Insert data fail %s\n",mysql_error(&my_sql));

  114. }

  115. void get_file_infor(const char *path1,char *arg)
  116. {
  117.     struct stat  filestat;
  118.     int n = 0;
  119.     char *path = (char *)malloc(256);
  120.     memset(path,0,256);
  121.     sprintf(path,"%s/%s",arg,path1);
  122.     if(lstat(path,&filestat))
  123.     {
  124.         fprintf(stderr,"get inode information fail %s\n",strerror(errno));
  125.         return;
  126.     }else
  127.     {
  128.          switch(filestat.st_mode & S_IFMT)
  129.         {
  130.             case S_IFBLK: args[1]  = "block";break;
  131.             case S_IFCHR: args[1] = "character";break;
  132.             case S_IFDIR: args[1] = "directory";break;
  133.             case S_IFIFO: args[1] = "FIFO/pipe";break;
  134.             case S_IFLNK: args[1] = "symlink";break;
  135.             case S_IFREG: args[1] = "regularfile";break;
  136.             case S_IFSOCK: args[1] = "socket";break;
  137.             default: args[1] = "unknown";
  138.          
  139.         }
  140.         sprintf(args[2],"%ld ",(unsigned long)filestat.st_nlink);
  141.         struct passwd * passwd = getpwuid(filestat.st_uid);
  142.         sprintf(args[3],"%s ",passwd->pw_name);
  143.         struct group * group = getgrgid(filestat.st_gid);
  144.         sprintf(args[4],"%s ",group->gr_name);
  145.         struct tm *filetime = gmtime(&(filestat.st_mtime));
  146.         sprintf(args[5],"%d/%d/%d",filetime->tm_year+1900,filetime->tm_mon,filetime->tm_mday);
  147.         sprintf(args[6],"%lld",filestat.st_size);
  148.         write_mysql();
  149.     }

  150. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP