【问题标题】:Why is fileno failing to return a valid descriptor?为什么 fileno 无法返回有效的描述符?
【发布时间】:2011-08-21 19:02:52
【问题描述】:

我正在用 funopen 打开一个流

FILE *fin = funopen(cookie, readfn, NULL, NULL, closefn);
if (fin == NULL)
{
    handle_error();
    return -1;
}
int fdin = fileno(fin);

对 funopen 的调用成功,但 fileno(fin) 返回 -1

如何获取文件描述符?谢谢。

【问题讨论】:

  • funopen 到底是做什么的?
  • 请注意,funopen 是特定于 BSD 的。
  • @Sander -- 我认为它类似于fopen,但更多的是fun
  • @Hogan :看起来它正在创建一个“假”流 - 听起来确实很有趣。

标签: c file file-io stdio


【解决方案1】:

使用funopen 打开的FILE(顺便说一句,它不是任何标准的一部分;AFAIK 它是 BSD 扩展)没有底层文件描述符。它有 cookie 而不是。我不知道你想要文件描述符做什么,但你可能不走运。

【讨论】:

  • 我知道funopen 是特定于 BSD 的。我需要描述符将 FILE 转换为 apr_file_t。
  • 我根本不了解 APR,但您应该尝试找到一种方法来直接apr_file_t 包裹在任何内容周围。如果您向我们展示您的 cookie 和读取函数的定义,我们或许可以提供更具体的建议。
  • 你总是可以创建一个管道到一个单独的线程而不是使用funopen
  • 是的,这就是我现在正在尝试的。我想避免创建线程(在这种特殊情况下感觉像是开销),但使用管道看起来是最好的解决方案。
【解决方案2】:

没有连接到 funopen 的文件,因此没有 fd。如果需要,请尝试 tmpfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2019-06-11
    • 1970-01-01
    • 2020-01-07
    • 2023-03-14
    相关资源
    最近更新 更多