【问题标题】:Casting to a File Pointer强制转换为文件指针
【发布时间】:2013-04-18 23:44:23
【问题描述】:

我正在设置 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 函数中使用这个 fi 结构,我希望我可以使用它来创建一个文件指针,我可以将它传递给我的加密函数。这是我目前设置的 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 变量转换成一个文件指针,这样我就可以把它用作我的输入文件指针参数。由于它最初是由“打开”操作创建的,因此似乎应该有一种方法可以做到这一点,但我无法使其工作。

有人可以帮忙吗?谢谢!

【问题讨论】:

    标签: c fuse file-pointer


    【解决方案1】:

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

    幸运的是,有一些功能可以让您从另一个中获取一个。在您的情况下,您需要使用 fdopen(3) 从文件描述符中获取 FILE *。如果您想另辟蹊径,请查看fileno(3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-10
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      相关资源
      最近更新 更多