我正在设置 FUSE 文件系统,我需要获取指向任何打开文件的文件指针,以便在它们被写入时对其进行加密。FUSE 系统使用一个特殊的结构。该结构的组件之一称为 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 函数中可供我使用,我希望我可以使用它来创建一个文件指针,我可以将它传递给我的加密函数。这是我目前设置的 write 函数的代码:
/* 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 变量变成一个文件指针,这样我就可以把它用作我的输入文件指针参数。由于它最初是由“打开”操作创建的,因此似乎应该有一种方法可以做到这一点,但我无法使其工作。
任何人都可以帮忙吗?谢谢!