我有两个问题,第一个问题已经解决了.
当前问题
如果我嵌入了一个需要加载库的文件,例如jpeg图像或mp3音乐,我将需要使用该文件作为库的输入.但是,每个库都是不同的,并使用一种方法来获取文件作为输入,输入可以是文件名或FILE*指针(来自libc的文件界面).
我想知道如何访问带有名称的嵌入式文件.如果我创建一个临时文件,那将是低效的,还有另外一种方法吗?我可以将文件名映射到内存吗?我的平台是Windows和Linux.
如果show_file(const char*name)是库中的函数,我将需要一个字符串来打开该文件.
我已经看到了这些问题:
如何在内存中获取缓冲区的文件描述符?
从C中的文件描述符获取文件名
以下代码是我的解决方案.这是一个好的解决方案吗?它效率低下吗?
# include <stdio.h>
# include <unistd.h>
extern char _binary_data_txt_start;
extern const void* _binary_data_txt_size;
const size_t len = (size_t)&_binary_data_txt_size;
void show_file(const char* name){
FILE* file = fopen(name, "r");
if (file == NULL){
printf("Error (show_file): %s\n", name);
return;
}
while (true){
char ch = fgetc(file);
if (feof(file) )
break;
putchar( ch );
}
printf("\n");
fclose(file);
}
int main(){
int fpipe[2];
pipe(fpipe);
if( !fork() ){
for( int buffsize = len, done …Run Code Online (Sandbox Code Playgroud) 让我解释一下我想要实现的目标:
我有一个加密的tar文件.我可以在内存中解密它,但显然我不能将解密后的数据作为真实文件写回硬盘.解密的数据被构造为内存中的char*缓冲区; 我怎么能在记忆中解开呢?
我找不到libtar库的答案.我也试着解开它execlp("tar", "tar", "-xvO", (void*)0).但它并没有像我想象的那样奏效.
任何人都可以给我一个最好的解决方案吗?谢谢!
我正在使用第三方库,允许在两种文件格式A和B之间进行转换.我想使用这个库加载格式为A的文件并将其转换为格式B,但我只需要在内存中转换的表示.所以我想进行转换而不实际将目标格式的文件保存到磁盘,而是获取unsigned char*缓冲区或类似的东西.不幸的是,只有库的转换功能才具有形式
void saveAsB(A& a, std::FILE *const file);
Run Code Online (Sandbox Code Playgroud)
我能做什么?有没有办法将句柄上执行的写操作重定向到某个缓冲区?