2011-08-21 153 views
1

我打开一个流与funopen为什么fileno无法返回有效的描述符?

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

的呼叫funopen成功,但fileno(fin)回报-1

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

+0

“funopen”究竟做了什么? –

+0

请注意[funopen](http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=funopen)特定于BSD。 –

+0

@Sander - 我觉得它像'fopen',但更多'乐趣' – Hogan

回答

2

A FILEfunopen打开(顺便说一下,它不是任何标准的一部分; AFAIK它是BSD扩展)没有底层文件描述符。它有曲奇,而不是。我不知道你想要什么文件描述符,但你可能运气不好。

+0

我知道'funopen'是BSD特有的。我需要描述符来将FILE转换为apr_file_t。 – pmf

+1

我根本不知道APR,但是你应该试着找到一种方法来直接*将'apr_file_t'包装在任何东西周围。如果您向我们展示了您的Cookie和阅读功能的定义,我们可能会提供更具体的建议。 – zwol

+0

你总是可以创建一个管道到一个单独的线程,而不是使用'funopen'。 –

0

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