2012-03-05 2 views
0

私は、クライアントが本質的にサーバーのディレクトリをマウントし、そのディレクトリとそれがローカルに格納されていた場合のファイルを使用することができるプログラムをC++で作成しようとしています。ディレクトリをマウントできるプログラムを作成する

サーバはLinux上で動作しますが、クライアントはLinuxでもWindowsでもかまいません。私はそれをLinuxだけにしても構いませんが、多くのコードを書き直すことなく、Windowsクライアントをサポートする機能を追加することができます。

どうすればこのようなことを作成できますか?私は過去数週間にわたってソケットに関することをかなり学びましたが、それが役割を果たすと仮定していますが、ディレクトリのマウントを許可し、ファイルに何かが発生したときに特定のアクションを実行する方法をまだ見つけていませんそのディレクトリ内にあります。例えば、ユーザがファイルを保存する場合、サーバは、ファイルを保存することに加えて、前記ファイルのタイムスタンプ付きバックアップを別のディレクトリに作成することもできるべきである。

ここでは、どのようにこれを行う方法を学び始めますか?

+0

gitの使用についてはどうですか? http://git-scm.com/ – sje397

+1

ダウンボートは何ですか?私が一般的に求めているのは、サーバ側のアプリケーションにクライアント側のフォルダをマウントさせ、サーバがそのアクションに反応するようにするために、linuxとインタフェースをとる方法です。そして、プログラムを作成してそれから学びたいと思っています。既に利用可能なものを使用しないでください。 – natli

+0

「サーバーのフォルダをマウントする」とは何を意味しますか?どのネットワークプロトコル(NFS、CIFS、...)?あなたは何を考えましたか? http://fuse.sourceforge.net/ ?? –

答えて

1

Linuxの近代的なデスクトップ環境では、すでにこの種の機能が含まれています。 mountとfuseを使用すると、今日利用可能なほとんどのネットワークファイルシステムをマウントすることもできます。

まだ進んでこれを行うことに決めたら、抽象化するレベルを選択する必要があります。 KDEでKioslaveを作成するようなデスクトップ環境の抽象化があれば、ユーザーとしてKDEアプリケーションに制限されます。あるいは、ファイルシステムレベルで動作し、キオスクレーブのUI統合が滑らかではないすべてのアプリケーションで動作するFUSEモジュールを使用する必要があります。

私はあなたの唯一のアプローチは、提供された仮想ファイルシステムAPIを使用することだと思う、私はこのようなことについて最近読んだことを誓うことができますが、私はそれを見つけることができません。私はエクスプローラの統合も可能だと信じていますが、わかりません。

0

私がそのようなプログラムを書いていたら、私は好きで、複数のプラットフォームでうまく動作するので、Qt librariesを使用します。 C++の純粋主義者は、さまざまな理由(一般的な 'javaish'性質のような)でそれらを嫌うので、boostによって提供されるファイルシステムユーティリティを調べたいと思うかもしれません。

QtのQFileSystemWatcherクラスは、ファイルとディレクトリの変更を通知できます。

もちろん、ソケット接続が必要で、メッセージを前後に送信する際に使用するプロトコルを決める必要があります。通常、他のツールを簡単に開発できるように、共通のプロトコル(例:JSONまたはおそらくGoogle's protocol buffers)を使用するとよいでしょう。

バージョン管理機能を提供するプログラムでは、多くの場合、カバーの下に既存のツールを使用しているため、gitを呼び出すだけで堅牢で強力なバージョン管理機能が得られることがあるため、コメントにはgitが記載されています。

関連する問題