1

FUSE ファイルシステムをセットアップしていますが、開いているファイルへのファイル ポインターを取得して、書き込み時に暗号化できるようにする必要があります。FUSE システムは特別な構造体を使用します。構造体のコンポーネントの 1 つは fh と呼ばれ、uint64_t 型です。ファイルが開かれると、次のコードでわかるように、int 変数に取り込まれます。

/* File open operation */
int bb_open(const char *path, struct fuse_file_info *fi)
{
    int fd;   
    fd = open(path, fi->flags);
    fi->fh = fd;
    return fd;
}

この fi 構造体は書き込み関数で使用できます。これを使用して、暗号化関数に渡すことができるファイル ポインターを作成できることを願っています。現時点で設定した書き込み関数のコードは次のとおりです。

/* Write data to an open file */
int bb_write(const char *path, const char *buf, size_t size, off_t offset,
         struct fuse_file_info *fi)
{
    char* password;
    FILE* fp;
    //malloc and instantiate password
    fp = (FILE*) fi->fh; //my lame attempt to get a file pointer
    return encrypt(<inpFilePtr>, <outFilePtr>, 1, password);
}

最後に、暗号化関数の署名は次のようになります。

extern int encrypt(FILE* in, FILE* out, int action, char* key_str);

その fi->fh 変数をファイル ポインターに変換して、入力ファイル ポインター引数として使用できるようにしたいと思います。もともと「開く」操作で作成されたものなので、これを行う方法があるはずですが、機能させることができません。

誰でも助けることができますか?ありがとう!

4

1 に答える 1

3

ファイル記述子とFILE *ポインターは同じものではありません。FILE *ポインターは、C 実装によって提供される不透明型へのポインターです。FILE *( fopenfread、など) を処理する API はfwritefclose標準 C の一部です。 一方、ファイル記述子は、POSIX システム コールを使用して操作されます。 ( openreadwritecloseなど) C レベルの抽象化を実装するためによく使用されます。

幸いなことに、一方から他方を取得できる関数があります。あなたの場合、ファイル記述子からfdopen(3)取得するために使用したいと思うでしょう。FILE *反対の方向に進みたい場合は、 を調べてくださいfileno(3)

于 2013-04-18T23:46:50.260 に答える