[c] 파일 포인터 (FILE * fp)를 파일 디스크립터 (int fd)로 어떻게 변환 할 수 있습니까?

나는이 FILE *호출에 의해 반환을 fopen(). 전화를 걸려면 파일 설명자를 가져와야 fsync(fd)합니다. 파일 포인터에서 파일 디스크립터를 얻는 기능은 무엇입니까?



답변

올바른 기능은 int fileno(FILE *stream)입니다. 에서 찾을 수 있으며 <stdio.h>POSIX 표준이지만 표준 C는 아닙니다.


답변

fileno(FILE *)파일 디스크립터를 리턴 하더라도 stdio의 버퍼를 우회하지 않도록주의하십시오. 버퍼 데이터 (읽기 또는 언 플러시 쓰기)가있는 경우 파일 디스크립터에서 읽기 / 쓰기를 수행하면 예기치 않은 결과가 발생할 수 있습니다.

부수적 인 질문 중 하나에 답하고 파일 설명자를 FILE 포인터로 변환하려면 다음을 사용하십시오. fdopen(3)


답변