思路:用鍊錶儲存檔案列表,到下乙個週期在用另乙個鍊錶儲存新的檔案列表,然後兩個鍊錶對比,找出那些沒變,那些是增加的,那些已經刪除了,然後根據這些資訊把重新把第乙個鍊錶修改好,並且把這些資訊寫到log中去
本程式主要分為5部分,main**檔案,鍊錶函式檔案,function函式檔案,標頭檔案,makefile。
#include
#include
#include
#include
#include
#include
#include "defend.h"
#include
#include
#include
#define max_path 1024
struct
list *tmp;
int status = 0; //這個是狀態位,主要是來驗證鍊錶中的檔案元素是不是已經被刪除
void daemonize(void)
}int main(void)
#include
#include
#include
#include
#include
#include
#include
#include "defend.h"
struct
list *creat_list() //建立鍊錶空間
void add_list(struct
list *ls, char *name, struct stat *st) //新增鍊錶元素
struct
list *tmp = creat_list();
tmp->next = p->next;
p->next = tmp;
strcpy(tmp->name, name);
memcpy(&tmp->st, st, sizeof(struct stat));
tmp->status = status%2;
}void show_list(struct
list *ls) //遍歷列印鍊錶元素 除錯的時候使用
}void del_list(struct
list *ls, char *name, struct stat *st) //刪除鍊錶中特定的元素
struct
list *tmp = p->next;
if(p->next->next == null)
p->next = null;
else
p->next = p->next->next;
free(tmp);
}void free_list(struct
list *ls) //釋放鍊錶
ls->next = null;
}void list_sort(struct
list *ls) //鍊錶排序,用過檔案的inode號排序,本打算使用別的查詢方法,但最終沒有實現,暫且放著
j = j->next;
}j = ls->next;
i = i->next;
}free(tmp);
}
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "defend.h"
#define max_path 1024
extern
struct
list *tmp; //引用外部變數,用於載入鍊錶
extern
int status; //引用外部變數,用於修改檔案存在狀態
void sys_err(const
char *str)
void load_list(char *dir) //把檔案資訊載入到鍊錶中去
void read_file(char *file) //遍歷目錄中的檔案
void contrast(struct
list *ls1, struct
list *ls2) //對比兩個鍊錶元素,如果第二個鍊錶中有,但第乙個鍊錶沒有的,就增加到第乙個鍊錶,並寫log
second = second->next;
}}int binary(struct
list *ls1, const
struct
list *ls2) //查詢鍊錶中有沒有這個元素,有就返回0,並更改第乙個鍊錶中的status位,沒有就返回-1
}first = first->next;
}return -1;
}void check_del(struct
list *ls) //檢查第乙個鍊錶中的status這個字段,來判斷檔案是否已刪除
p = p->next;
}}void write_log(struct
list *ls, char *buff) //寫日誌
; time(&t);
sprintf(str, "%s\t%s\t%s", buff, ls->name, ctime(&t));
write(fd, str, strlen(str));
close(fd);
}
#define __defend__
struct
list ;
struct
list *creat_list(); //建立
void add_list(struct
list *, char *, struct stat *); //新增
void show_list(struct
list *); //遍歷列印
void del_list(struct
list *, char *, struct stat *); //刪除元素
void free_list(struct
list *); //釋放鍊錶
void list_sort(struct
list *); //鍊錶排序
void sys_err(const
char *);
void load_list(char *); //載入目錄
void read_file(char *); //遍歷目錄
void contrast(struct
list *, struct
list *); //對比兩個鍊錶
int binary(struct
list *, const
struct
list *); //查詢鍊錶中時候存在某個元素
void check_del(struct
list *); //刪除檔案不存在的元素
void write_log(struct
list *ls, char *buff); //寫日誌
#endif
鍊錶中第乙個元素為空,只能判斷增加或者刪除,順序查詢法,效率低下,
Redhat Linux守護程序列表(2)
1.mysqld 乙個快速高效可靠的輕型 sql資料庫引擎守護程序。2.netdump 遠端網路備份伺服器守護程序。3.netdump server 4.netfs network filesystem mounter 該程序安裝和解除安裝 nfs samba 和ncp 網路檔案系統。5.netpl...
PM2 守護程序學習
pm2 是乙個帶有負載均衡功能的node應用的程序管理器。當你要把你的獨立 利用全部的伺服器上的所有cpu,並保證程序永遠都活著,0秒的過載,pm2 是完美的。npm install pm2 g 全域性安裝 pm2,需提前安裝 node pm2 start server.php 啟動 server....
C程式語言(第2版) 課後練習題6 1
練習6 1 上述getword函式不能正確處理下劃線 字串常量 注釋及預處理器控制指令。請編寫乙個更完善的getword函式。題目的理解 1.在得到word時,要把下劃線 和字母數字作為word的一部分考慮 3.注釋內容全部過濾掉 4.不考慮預處理器控制指令中的文字資訊 這一點我沒加入到程式當中,其...