Я настраиваю файловую систему 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;
}
Это фи структура доступна для меня в функции записи, и я надеюсь, что я могу использовать это создать указатель файла, который я могу передать моей функции шифрования. Вот код для функции записи, как я это настроило на данный момент:
/* 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 variable и превратить его в указатель файла, чтобы я мог использовать его в качестве аргумента указателя на входной файл. Поскольку он был первоначально создан «открытой» операцией, кажется, что должен быть способ сделать это, но я не могу заставить его работать.
Может ли кто-нибудь помочь? Благодаря!
Похоже, что это работает. Огромное спасибо! – Alex