【问题标题】:Remote sync directory in CC中的远程同步目录
【发布时间】:2019-03-11 00:54:17
【问题描述】:

我没有 C 方面的经验,但是...

如果我想用 C 语言为 linux 系统编写一个程序,它会将本地文件/目录同步到远程文件/目录,会在本地文件/目录更新时自动 ;我应该查看哪些库或内置插件?

到目前为止,我查看了 inotify,但在没有任何帮助的情况下,我真的缺乏搜索这个的术语。

编辑

这只是一个练习。

【问题讨论】:

  • 我采取的天真的方法是编写一个客户端-服务器应用程序——客户端会监视更改并将差异发送到服务器,服务器会在远程计算机上应用补丁。例如,这似乎可以通过使用 BSD 套接字 API 和 libdiff 轻松实现。
  • 您可以使用任何可以访问系统调用的语言进行该练习(例如 Ocaml、Perl、Python、Ruby、C、C++ ......)

标签: c linux


【解决方案1】:

librsync,一个实现rsync算法的库。但是你真的需要在 C 中这样做吗?一种更常见、更简单的方法是使用 shellscripts 和 rsync 程序。

【讨论】:

  • 是的。我对rsync非常熟悉。这或多或少是一个训练练习,因为我正在尝试熟悉不同的语言。我来看看 librsync。
【解决方案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);
}

【讨论】:

  • 感谢鼓励。
猜你喜欢
  • 2012-04-20
  • 2010-11-30
  • 2022-01-06
  • 2014-06-05
  • 2018-05-07
  • 2011-07-22
  • 1970-01-01
  • 2011-08-11
相关资源
最近更新 更多