gpt4 book ai didi

转换为文件指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:32 25 4
gpt4 key购买 nike

我正在设置 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 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 变量并将其转换为文件指针,以便我可以将其用作我的输入文件指针参数。由于它最初是由“打开”操作创建的,因此似乎应该有办法做到这一点,但我无法让它发挥作用。

有人可以帮忙吗?谢谢!

最佳答案

文件描述符和FILE * 指针不是一回事。 FILE * 指针是指向 C 实现提供的不透明类型的指针 - 处理 FILE * 的 API(fopenfreadfwritefclose 等)是标准 C 的一部分。另一方面,文件描述符使用 POSIX 系统调用进行操作(open, read, write, close等)常用于实现C级抽象。

幸运的是,有些函数可以让您从另一个函数中获取一个。在您的情况下,您需要使用 fdopen(3)从文件描述符中获取 FILE *。如果您想走另一条路,则需要查看 fileno(3) .

关于转换为文件指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com