fdopen()
, fileno()
을 사용하면 기존 파일 설명자를 사용하여 스트림을 열 수 있습니다. 그러나 스트림을 사용하여 파일을 열면 파일을 닫는 적절한 방법은 fclose()
FILE
포인터입니다. 어떻게 스트림을 닫을 수 있지만 열린 파일 설명자를 유지할 수 있습니까?기본 파일 설명자를 닫지 않고 FILE 포인터를 닫습니다.
이 동작은 닫는 경우를 제외하고는 fflush()
을 호출 한 다음 fileno()
을 호출 한 다음 FILE
포인터를 다시 사용하지 않는 것과 비슷합니다. 추가 우려 사항은 fdopen()
이 다시 입력되면 FILE
포인터가 여러 개 있고 이제 그 중 하나만 닫을 수 있다는 것입니다. 당신이 (당신이 fileno()
이 있기 때문에 당신이 있다고 가정한다)를 POSIXy 시스템의 경우
windows 및 다른 플랫폼은 fileno()를 지원합니다! 나는이 dup() 솔루션을 매우 우아하고 분명하지 않다고 믿을 수 없다. –
새로운 fd를 원래의 fd로 다시 dup2()하고 새로운 fd를 닫을 필요가 없다. 그래서 모든 것이 파일 스트림이 닫힌 것을 제외하고는 이전의 방식으로 되돌아갑니다. : D 당신이 fclose()를하기 전에 oldfd = fileno (stream)이 필요하다는 것을 의미합니다. –
Jonathan은 멀티 스레드 응용 프로그램에서 뛰어나다. 'fdopen'에 fd를주기 전에'dup'하는 것이 더 좋으므로 원본에 결코 닿지 않도록 할 수 있습니다. – bdonlan