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 変数をファイル ポインターに変換して、入力ファイル ポインター引数として使用できるようにしたいと思います。もともと「開く」操作で作成されたものなので、これを行う方法があるはずですが、機能させることができません。
誰でも助けることができますか?ありがとう!