2011-08-21 3 views
1

나는 funopen하는 funopenfileno가 유효한 설명자를 반환하지 않는 이유는 무엇입니까?

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

호출하여 스트림을 여는 성공하지만 fileno(fin) 반환 -1하고 있습니다.

어떻게 파일 설명자를 얻을 수 있습니까? 감사.

+0

'funopen'은 정확히 무엇을합니까? –

+0

[funopen] (http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=funopen)은 BSD에만 적용됩니다. –

+0

@Sander - 나는 'fopen'과 같다고 생각하지만, 더 많은'fun '를 더 가지고 있습니다. – Hogan

답변

2

(표준의 일부가 아니며, AFAIK는 BSD 확장 프로그램입니다)에는 기본 파일 설명자가 없습니다. 쿠키는 대신입니다. 나는 당신이 파일 디스크립터를 원했는지 모르지만 아마 운이 좋을 것이다.

+0

'funopen '은 BSD에 고유하다는 것을 알고 있습니다. FILE을 apr_file_t로 변환하는 기술자가 필요했습니다. – pmf

+1

나는 APR을 전혀 모른다. 그러나 무엇이든간에 직접'apr_file_t '을 감싸는 방법을 찾아야한다. 쿠키와 읽기 기능에 대한 정의를 보여 주면보다 구체적인 조언을 드릴 수 있습니다. – zwol

+0

'funopen' 대신에 항상 별도의 스레드에 파이프를 생성 할 수 있습니다. –

0

funopen에 연결된 파일이 없으므로 fd가 없습니다. 필요할 경우 tmpfile을 시도하십시오.