2004년 10월 4일 월요일

fdopen으로 fd를 fp로 바꾸면 fclose 호출 후 close를 또 호출할 필요가 있을 까?

의문) fd를 fdopen을 통해 fp로 바꾼 후 fclose로 닫으면 close로 fd를 또 닫을 필요가 있을 까 없을 까?

$ cat ./test.cpp
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    int fd;
    FILE* fp;
    fd = open("hello.txt", O_CREAT|O_TRUNC);
    printf("fd1 : %d\n", fd);

    fp = fdopen(fd, "r");
    fclose(fp);

    fd = open("hello2.txt", O_CREAT|O_TRUNC);
    printf("fd2 : %d\n", fd);

    return 0;
}

$ ./a.out
fd1 : 3
fd2 : 3

관찰 : open를 두 번째로 call했을 때 빈 fd 중 가장 작은 것을 주는 데, 3번이 닫혔으므로 3번을 주는 것이 분명하다.

결론 : fdopen으로 fd를 fp로 바꾼후 fclose로 닫으면 fd가 닫히기 때문에
close()를 또 호출할 필요가 없다.

댓글 없음:

댓글 쓰기