기본 파일 디스크립터를 닫지 않고 파일 포인터를 닫습니다.
문제
사용하여 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)가 도움이 될 수 있습니다.
제휴하지 않습니다 StackOverflow