2011-08-21 152 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