2

ファイルのバージョンを維持するために librsync ライブラリを使用しています。ネットワークからファイルを開くことができません。

例 (署名ファイルの作成):

int main(int argc, char** argv)//FILE *original, FILE *signature)
{
    if(argc != 2)
    {
        cout<<"Enter the original file name."<<endl;
        exit(1);
    }

    FILE *fpa;
    fpa = fopen(argv[1],"r");

    if(fpa==NULL)
    {
        cout<<"ERROR"<<endl;
        exit(1);
    }

    FILE *fps;
    fps = fopen("sig.sig","w+");


    rs_result res = rs_sig_file(fpa, fps, 1,2,NULL);

    fclose(fpa);
    fclose(fps);

    printf("Result code: %d\n", res);

    return 0;
}

ネットワーク経由でファイルの引数を指定してプログラムを実行すると、たとえば

./a.out cs1130218@palasi.cse.iitd.ernet.in:games.txt

fpa は NULL です。

fopen は、ネットワーク経由でファイルを開くために作成されていないと思います。これを実行できるコマンドが必要です。c/c++ の任意のコマンド。このプログラムで私が何をしたいのかがはっきりとわかります。

4

2 に答える 2

4

「ネットワーク経由でファイルを開くことができるコマンドが必要です」は、非常に高レベルの操作であり、あらゆる種類の詳細を網羅しています。どのような種類のネットワーク プロトコルを使用する必要がありますか? 認証はどのように処理する必要がありますか? ネットワーク エラーはどのように処理する必要がありますか? ファイルが開いたら、読み取り/書き込み/両方、シーケンシャルまたはランダムに何をする必要がありますか?

librsync は比較的低レベルであり、これらの質問自体に答えようとさえしません。その READMEでは次のように説明されています。

librsync は rsync ワイヤ プロトコルを実装していません。ファイルを転送するために rsync サーバーと通信したい場合は、rsync にシェルアウトする必要があります。librsync は、rsync と同じくらい効率的にファイルを転送する他のプログラムを構築するためのものです。librsync を使用して、バックアップ ツールを作成したり、プログラムにバイナリ パッチを配布したり、サーバーまたはピア間でディレクトリを同期したりできます。

ネットワーク経由でファイルを開くには、独自のサーバーとワイヤ プロトコルを実装する必要があります。または、rsyncこれらの詳細を処理するようなコマンドをシェル アウトする必要があります (そして、ロジックのほとんどが他のコマンドでは、C++ は最適なツールではない可能性があります)。

于 2015-02-25T19:56:00.463 に答える
1

librsyncリモートファイルもfopen扱いません。

代わりに、 GVFSや KIOなどの仮想ファイルシステム ライブラリを使用することを検討してください。これらは SFTP 経由でファイルを開くことができ、それらを librsync に渡すことができます。

于 2015-03-02T06:02:58.940 に答える