FILE* 로부터 file descriptor를 얻어내어 두 변수를 함께 사용하고자 합니다. (위 작업을 위해 fileno 함수를 이용하고자 합니다.)
이때, 해당 파일을 다 사용하고, 닫고자 할때,
위 두 변수 모두를 각각 fclose, close 해 줘야 하는것인가요?
아니면 하나만 해주면 되는 것인가요?
위 상황은 한 프로세스내(멀티 쓰레드)에서 이뤄지는 상황입니다.
고수님들의 고견 부탁드립니다.
파일포인터로부터 파일디스크립트를 얻어낼 경우
기존 파일포인터는 사용불가능하도록 바뀌게 됩니다.
따라서 닫을때는 close만 하면 되겟죠?
굳이 2개를 사용해야한다면 두번 열어야합니다.
fileno() 로 파일디스크립터를 얻어내도 기존의 파일스트림포인터는 닫히지 않습니다. 따라서 fileno() 로 파일디스크립터를 얻어낸다고 해도 파일스트림포인터와 병행가능합니다. 이런 경우를 linked channel 이라고 부르죠.
원래 이렇게 사용하면 안좋지만, 간혹 특수한 경우에 버퍼링의 필요로 인해서 linked channel을 사용하는 경우가 있습니다.
만일 독립적으로 파일디스크립터만 사용하겠다면 fclose()로 파일스트림 포인터는 닫아줘야 합니다.
거구로 open()으로 파일디스크립터를 얻고 fdopen()으로 파일스트림포인터를 얻어낸 경우도 동일합니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
[Re:]FILE*로부터 file descriptor를 얻어냈을때..
파일포인터로부터 파일디스크립트를 얻어낼 경우
기존 파일포인터는 사용불가능하도록 바뀌게 됩니다.
따라서 닫을때는 close만 하면 되겟죠?
굳이 2개를 사용해야한다면 두번 열어야합니다.
fileno() 로
fileno() 로 파일디스크립터를 얻어내도 기존의 파일스트림포인터는 닫히지 않습니다.
따라서 fileno() 로 파일디스크립터를 얻어낸다고 해도 파일스트림포인터와 병행가능합니다.
이런 경우를 linked channel 이라고 부르죠.
원래 이렇게 사용하면 안좋지만, 간혹 특수한 경우에 버퍼링의 필요로 인해서
linked channel을 사용하는 경우가 있습니다.
만일 독립적으로 파일디스크립터만 사용하겠다면 fclose()로 파일스트림 포인터는 닫아줘야 합니다.
거구로 open()으로 파일디스크립터를 얻고 fdopen()으로 파일스트림포인터를 얻어낸 경우도 동일합니다.
댓글 달기