2012-11-04 118 views
1

我在C沒有經驗,但是......遠程同步目錄

如果我想寫一個程序,在C,爲Linux系統,這將本地文件/目錄同步到遠程文件/目錄,自動當本地文件/目錄更新;我應該看看哪些庫或嵌入式應用?

到目前爲止,我看着inotify,但我真的缺乏沒有一些幫助的搜索這個術語。

編輯

這僅僅是一個鍛鍊。

+0

我會帶正在寫一個客戶端 - 服務器應用程序的簡易方法 - 客戶會看更改並向服務器發送一個差異,服務器將在遠程機器上應用該補丁。例如,這似乎很容易通過使用BSD套接字API和libdiff來實現。 – 2012-11-04 07:47:37

+0

您可以使用任何語言進行練習,以便訪問系統調用(例如Ocaml,Perl,Python,Ruby,C,C++,...) –

回答

2

inotify是要走的路。通過它努力奮鬥,當你陷入困境時會回來,並在這裏提出更具體的問題。

這裏有讓你開始一個例子(原諒C++輸出語句,想象printf代替):

void waitfor_activity(const char *path) 
{ 
     const int fd = inotify_init(); 
     const int wd = inotify_add_watch(fd, path, IN_MODIFY | IN_CLOSE_WRITE); 

     char buffer[EVENT_BUF_LEN]; 
     while (true) 
     { 
       const ssize_t length = read(fd, buffer, EVENT_BUF_LEN); 
       if (length < 0) { 
         perror("read"); 
       } 
       const struct inotify_event *event = (struct inotify_event *) buffer; 
       std::cout << "event: "; 
       if (event->mask & IN_CLOSE_WRITE) 
       { 
         std::cout << "IN_CLOSE_WRITE "; 
       } 
       if (event->mask & IN_MODIFY) 
       { 
         std::cout << "IN_MODIFY "; 
       } 
       std::cout << std::endl; 
     } 
     close(fd); 
} 
+0

感謝您的鼓勵。 – noel

2

librsync,一個實現rsync算法的庫。但是你真的需要在C中做這個嗎?更常見,也更簡單的方法是使用shellcript和rsync程序。

+0

是的。我對rsync非常熟悉。這或多或少是一項訓練,因爲我試圖熟悉不同的語言。我會看看librsync。 – noel