2012-11-04 92 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