문제

accept()를 사용하여 소켓을 만들고 fdopen()을 사용하여 FILE을 만들 때 모든 것을 정리하려면 어떻게 해야 합니까?FILE에서 fclose()를 수행하고, 소켓에서 shutdown() 및 close()를 수행해야 합니까, 아니면 shutdown() 및/또는 close() 또는 fclose()만 수행해야 합니까?fclose()를 수행하지 않으면 FILE 포인터를 수동으로 해제()해야 합니까?

도움이 되었습니까?

해결책

남자 fdopen에서:

파일 설명자는 복제되지 않으며 fdopen()에 의해 생성된 스트림이 닫힐 때 닫힙니다.

그래서 나는 기본 파일 설명자를 닫는 fclose()를 사용합니다.shutdown()이 필요한지도 모르겠습니다.

다른 팁

에서 http://opengroup.org/onlinepubs/007908775/xsh/fclose.html

fclose () 함수는 스트림에 의해 가리키는 스트림과 관련된 파일 디스크립터에서 close ()를 수행합니다.

소켓을 스트림으로 래핑한 경우 최소한 스트림을 먼저 플러시하지 않고는 shutdown()을 수행하는 것이 더 이상 의미가 없습니다.그러나 나는 그것을 맹세하지 않을 것입니다. 왜냐하면 단지 close() 대신 shutdown()을 원하는 용도가 없다는 것을 모르기 때문입니다.

여기서 정리해야 할 사항은 2가지입니다.로 표현되는 스트림 FILE 소켓으로 표시되는 파일 설명자입니다.먼저 스트림을 닫은 다음 파일 설명자를 닫아야 합니다.따라서 일반적으로 다음을 수행해야 합니다. fclose() 어느 FILE 객체, 그 다음 close() 모든 파일 설명자.

개인적으로 저는 한번도 사용해본적이 없습니다 shutdown() 혼자 청소하고 싶을 때는 말할 수 없습니다.

편집하다

다른 분들이 정확하게 지적해주셨네요 fdclose() 또한 기본 파일 설명자를 닫고 호출 이후 close() 파일 설명자를 닫으면 오류가 발생합니다. 이 경우에는 다음 사항만 필요합니다. fdclose().

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top