문제

사용하여 fdopen(), fileno() 기존 파일 디스크립터로 스트림을 열 수 있습니다. 그러나 파일을 닫는 올바른 방법은 스트림으로 파일을 열었을 때 fclose() 그만큼 FILE 바늘. 스트림을 어떻게 닫을 수 있지만, 열린 파일 디스크립터를 유지할 수 있습니까?

이 행동은 전화와 유사합니다 fflush() 그리고 fileno(), 그런 다음 절대 사용하지 마십시오 FILE 폐쇄를 제외하고 다시 포인터. 또 다른 우려는 당신이 그때 당신이한다는 것입니다 fdopen() 다시, 이제 여러 가지가 있습니다 FILE 포인터, 당신은 그들 중 하나만 닫을 수 있습니다.

도움이 되었습니까?

해결책

당신이 posixy 시스템을 사용하고 있다면 (당신이 가지고 있다고 생각합니다. fileno()), 당신이 사용할 수있는 dup() 파일 디스크립터를 복제하려면 :

int newfd = dup(fileno(stream));
fclose(stream);

또는 당신은 손을 잡을 수 있습니다 fdopen() 중복 파일 디스크립터 :

FILE *stream = fdopen(dup(fd), "r");

어느 쪽이든, FD의 다른 사본은 FILE *. 그러나 위치 포인터를 명심하십시오 ~이다 공유하십시오. 동시에 두 가지를 모두 사용하는 경우 조심하십시오. 또한, fcntl() 원래 FD에 고정 된 자물쇠 ~ 할 것이다 사본을 닫으면 해제됩니다.

다른 팁

다른 모든 것이 실패하면 DUP (2)가 도움이 될 수 있습니다.

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