linux c数据库备份第二版
时间:2021-07-01 10:21:17
帮助过:3人阅读
#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\n");
38 exit(
1);
39 }
40
41 switch (pid) {
42 case -
1:
43 fprintf(stderr,
"fork failed\n");
44 exit(
1);
45 case 0:
46 //子进程进行数据库的备份
47 for (i =
0; i < read_num; i++
) {
48 memset(buf,
‘\0‘, 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\n", 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\n");
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],
‘\0‘, 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\n", DB_FILE);
100 }
101 else {
102 malloc_dblist();
103
104 read_num =
0;
105 while (fscanf(fp,
"%127[^\r\n]\n", db_list[read_num]) ==
1) {
106 puts(db_list[read_num]);
107 read_num++
;
108 }
109
110 fclose(fp);
111 }
112
113 }
linux c数据库备份第二版
标签: