2011-02-05 4 views
1

私はソース管理アプリケーションを作成しています。今では、BSDソケットを使って、あるマシンから別のマシンにファイルをコピーしたいのです。私はまた、シンボリックリンクに従うのではなく、リンク自体を他のマシンにコピーしたいと思っています。私はこの1つに固執されたリリトルビットです。ネットワーク上のシンボリックリンクをコピーする

私は、readlink()コマンドを使用して、マシンの反対側にデータを送信し、受信した内容をファイルに書き込むことを考えていました。私はそれがうまくいくかどうか分からない。シンボリックリンクでは、異なるオペレーティングシステム(私の場合はUbuntuとMac OS X)が同じファイル構造を持っているかどうかわからないからです。受信したコンテンツをファイルに書き込むと自動的にそれをシンボリックリンクにするかどうかはわかりません。正直なところ私はそれをほとんど疑っていません。おそらくコマンドでO_SYMLINKフラグを指定すると、シンボリックリンクを作成して書き込むことができますか?

私が考えた他のオプションは、他のマシンに私たちがリンクを扱っていることを知らせて、symlink()でそのマシンのリンクを作成することでしたが、ここには2つの問題があります。まず、ファイルシステム上のシンボリックリンクが指し示す絶対ファイル名を取得するにはどうすればよいですか。もう1つ問題は、存在しないファイルを使用してsymlink()を呼び出すのがうまくいかないかどうかわかりません。誰かがこれを説明することができれば、私はそれを感謝

、 IEF2

答えて

1

送信元システムではreadlinkを、送信先システムではsymlinkを使用する必要があります。シンボリックリンクは実際には "シンボリックリンクのファイル構造"を持っていません。シンボリックリンクはファイルパス(絶対パスまたは相対パス)を含んでいます。

そのままシンボリックリンクをコピーする必要があります。それをターゲットシステムに調整しようとしないでください。ターゲットファイルが存在しないシンボリックリンク(シンボリックリンクが壊れている)を置いても問題ありません。ユーザーは意味をなさないリンクを設定する必要があります(絶対的かもしれませんが、通常は相対的です)。もしそうでなければ、物事は予測可能な形で失敗する。

1

なぜないだけのような何かを実行します。 タールcvfpを - 。 | ssh user @ remote "cd targetdir; tar xfp - " ?

+0

私は物事の仕組みを知りたいので – v1Axvw

関連する問題