gpt4 book ai didi

c++ - 从 std::FILE* 创建 GIO GFile 或 GInputStream

转载 作者:行者123 更新时间:2023-12-03 07:01:00 25 4
gpt4 key购买 nike

我必须连接两个 API,它们使用不同的结构来描述文件。一个为我提供了一个 std::FILE*第二个期望 GFile*GInputStream*属于GIO .有没有一种直接的方法可以从我收到的原始文件指针创建任一对象?

void my_function(std::FILE * file) {

GFile * gfile = some_creator_method(file);
//or alternatively
GInputStream * ginput = some_stream_creator_method(file);

//...
//pass the GFile to the other library interface
//either using:
interface_function(gfile);
//or using
interface_stream_function(ginput);
}

//The interface function signatures I want to pass the parameter to:

void interface_function(GFile * f);

void interface_stream_function(GInputStream * is);

最佳答案

如果要重用底层文件句柄,则需要特定于平台。

  • 在 POSIX 上: fileno 结合 g_unix_input_stream_new
  • 在 Windows 上: _get_osfhandle 结合 g_win32_input_stream_new

  • 例如像这样:
    void my_method(FILE* file) {
    #ifdef _WIN32
    GInputStream* ginput = g_win32_input_stream_new(_get_osfhandle(file), false);
    #else
    GInputStream* ginput = g_unix_input_stream_new(fileno(file), false);
    #endif

    . . .
    . . .

    g_input_stream_close(ginput, nullptr, nullptr);
    }
    请记住, file只要 ginput 就应该保持打开状态正在使用中。

    关于c++ - 从 std::FILE* 创建 GIO GFile 或 GInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63901592/

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