• linux c数据库备份第二版


    #想知道更多请查看第一版"linux c数据库备份第一版"

      1 #include<sys/types.h>
      2 #include<sys/wait.h>
      3 #include<ctype.h>
      4 #include<unistd.h>
      5 #include<string.h>
      6 #include<stdlib.h>
      7 #include<stdio.h>
      8 
      9 //待备份的数据表文件(一个数据库一行)
     10 #define DB_FILE "./db_list"
     11 //最多可以备份的数据库数量
     12 #define NUM 20
     13 //一个数据库名字的最长字符数
     14 #define LEN 128
     15 //保存从DB_FILE中读取到的数据库
     16 char *db_list[NUM];
     17 //从DB_FILE文件中读取到的数据库数量
     18 int read_num;
     19 //请求内存函数
     20 void malloc_dblist();
     21 //释放内存函数
     22 void free_dblist();
     23 //读取数据库文件
     24 void readDbFile();
     25 
     26 int main(int argc, char *argv[]) {
     27     pid_t pid;
     28     int i;
     29     char buf[LEN];
     30 
     31     //从文件读取数据库信息
     32     readDbFile();
     33     
     34     pid = fork();
     35 
     36     if (pid < 0) {
     37         fprintf(stderr, "fork error
    ");
     38         exit(1);
     39     }
     40     
     41     switch (pid) {
     42         case -1:
     43             fprintf(stderr, "fork failed
    ");
     44             exit(1);
     45         case 0:
     46             //子进程进行数据库的备份
     47             for (i = 0; i < read_num; i++) {
     48                 memset(buf, '', LEN);
     49                 sprintf(buf, "%s%s%s%s%s", "mysqldump -uroot ", db_list[i], " > ", db_list[i], ".sql");
     50                 system(buf);
     51                 printf("%d,%s
    ", i, buf);
     52             }
     53             break;
     54     }
     55     //等待子进程的结束
     56     if (pid > 0) {
     57         int stat_val;
     58         pid_t child_pid;
     59         
     60         child_pid = wait(&stat_val);
     61         
     62         if (!WIFEXITED(stat_val)) {
     63             fprintf(stdout, "Child terminated abnormaly
    ");
     64         }
     65         exit(1);
     66         
     67     }
     68     
     69     free_dblist();
     70     
     71     exit(0);
     72     
     73 }
     74 
     75 void malloc_dblist()
     76 {
     77     int i = 0;
     78     //malloc for db_list
     79     for (i = 0; i < NUM; i++) {
     80         db_list[i] = malloc(LEN);
     81         memset(db_list[i], '', LEN);
     82     }
     83 }
     84 void free_dblist()
     85 {
     86     int i;
     87     //free db_list's memory
     88     for (i = 0; i < NUM; i++) {
     89         free(db_list[i]);
     90     }
     91 }
     92 
     93 void readDbFile()
     94 {
     95     FILE *fp;
     96     
     97     fp = fopen(DB_FILE, "r");
     98     if (!fp) {
     99         fprintf(stderr, "%s not found
    ", DB_FILE);
    100     }
    101     else {
    102         malloc_dblist();
    103         
    104         read_num = 0;
    105         while (fscanf(fp, "%127[^
    ]
    ", db_list[read_num]) == 1) {
    106             puts(db_list[read_num]);
    107             read_num++;
    108         }
    109         
    110         fclose(fp);    
    111     }
    112     
    113 }
  • 相关阅读:
    spring mvc之DispatcherServlet类分析
    python根据操作系统类型调用特定模块
    C#编写windows服务程序
    写在开始前---多端小系统结构
    写在开始前---web异常处理
    java反射
    写在开始前---简单业务分层
    写在开始前---ajax中的会话过期与重新登录
    一个简易的netty udp服务端
    google的python语言规范
  • 原文地址:https://www.cnblogs.com/qizexi/p/4657183.html
Copyright © 2020-2023  润新知