相关疑难解决方法(0)

如何将文件嵌入可执行文件?

我有两个问题,第一个问题已经解决了.

当前问题
如果我嵌入了一个需要加载库的文件,例如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)

c c++ binary executable file

16
推荐指数
2
解决办法
6813
查看次数

如何在内存中解压缩文件(c编程)?

让我解释一下我想要实现的目标:

我有一个加密的tar文件.我可以在内存中解密它,但显然我不能将解密后的数据作为真实文件写回硬盘.解密的数据被构造为内存中的char*缓冲区; 我怎么能在记忆中解开呢?

我找不到libtar库的答案.我也试着解开它execlp("tar", "tar", "-xvO", (void*)0).但它并没有像我想象的那样奏效.

任何人都可以给我一个最好的解决方案吗?谢谢!

c tar

4
推荐指数
2
解决办法
9455
查看次数

将FILE句柄重定向到char-buffer

我正在使用第三方库,允许在两种文件格式AB之间进行转换.我想使用这个库加载格式为A的文件并将其转换为格式B,但我只需要在内存中转换的表示.所以我想进行转换而不实际将目标格式的文件保存到磁盘,而是获取unsigned char*缓冲区或类似的东西.不幸的是,只有库的转换功能才具有形式

void saveAsB(A& a, std::FILE *const file);
Run Code Online (Sandbox Code Playgroud)

我能做什么?有没有办法将句柄上执行的写操作重定向到某个缓冲区?

c++ file-io

2
推荐指数
1
解决办法
825
查看次数

标签 统计

c ×2

c++ ×2

binary ×1

executable ×1

file ×1

file-io ×1

tar ×1