6 1 守護程序課後題2015 8 1

2021-07-04 06:43:37 字數 3692 閱讀 7878

思路:用鍊錶儲存檔案列表,到下乙個週期在用另乙個鍊錶儲存新的檔案列表,然後兩個鍊錶對比,找出那些沒變,那些是增加的,那些已經刪除了,然後根據這些資訊把重新把第乙個鍊錶修改好,並且把這些資訊寫到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.不考慮預處理器控制指令中的文字資訊 這一點我沒加入到程式當中,其...