2

私はCの経験がありませんが...

Linuxシステム用のプログラムをCで作成したい場合は、ローカルファイル/ディレクトリが更新されると自動的にローカルファイル/ディレクトリをリモートファイル/ディレクトリに同期します。どのライブラリまたはビルトインを見る必要がありますか?

私はこれまでinotifyを見てきましたが、助けなしにこれを検索するための用語が本当に不足しています。

編集

これは単なる演習です。

4

2 に答える 2

3

rsyncアルゴリズムを実装するライブラリであるlibrsyncがあります。しかし、本当にこれをCで行う必要がありますか?より一般的ではるかに簡単な方法は、シェルスクリプトとrsyncプログラムを使用することです。

于 2012-11-04T07:51:41.403 に答える
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-11-04T14:41:43.460 に答える