gpt4 book ai didi

将 char* 转换为 FILE* 而不保存文件

转载 作者:行者123 更新时间:2023-11-30 19:04:04 25 4
gpt4 key购买 nike

我正在尝试以“rb”模式打开现有文件,并且我需要解密返回一个新的文件*,而不覆盖原始文件或创建新的临时文件。简而言之,我需要这样的东西:

FILE *decrypt(){
FILE *cryptedfile = fopen("file.ext", "rb");

//... my decrypter code

return (the decrypted file as FILE*).
}

那么,有一种方法可以执行“将 char* 转换为 FILE*”之类的操作吗?

我尝试了许多不同的解决方案,但没有成功,我还尝试创建一个新的 tmpfile() 但结果似乎无法正常工作,我无论如何都不想创建 tmpfile,而是将其保留在内存中。

谢谢 :)

最佳答案

解密数据后,您可以创建一个管道来将解密后的数据输入其中,然后您可以返回管道的读取端来读取数据。

FILE *decrypt(){
FILE *cryptedfile = fopen("file.ext", "rb");

char *data;
int len;
// load decrypted data into "data" and length info "len"

int p[2];
if (pipe(p) == -1) {
perror("pipe failed");
return NULL;
}

int rval;
if ((rval = write(p[1], data, len)) == -1) {
perror("write failed");
close(p[0]);
close(p[1]);
return NULL;
} else if (rval < len) {
printf("write failed, wrote %d, expected %d\n", rval, len);
close(p[0]);
close(p[1]);
return NULL;
}

return fdopen(p[0], "r");
}

或者,您也可以使用fmemopen:

FILE *decrypt(){
FILE *cryptedfile = fopen("file.ext", "rb");

char *data;
int len;
// load decrypted data into "data" and length info "len"

return fmemopen(data, len, "rb");
}

关于将 char* 转换为 FILE* 而不保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52974572/

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