Difference between fclose and close

后端 未结 4 1712
终归单人心
终归单人心 2020-12-31 14:50

If I fopen a file, what\'s the difference between calling fclose or close and which one should I use?

If forked children have

相关标签:
4条回答
  • 2020-12-31 15:20

    which one should I use?

    If you open a file with fopen, close it with fclose. Using close in this case may cause a memory leak on a handle allocated by fopen

    0 讨论(0)
  • 2020-12-31 15:35

    open() and close() are UNIX syscalls which return and take file descriptors, for use with other UNIX syscalls such as write(). fopen() and fclose() are standard C library functions which operate on FILE*s, for use with things like fwrite and fprintf. The latter are almost always what you should be using: They're simpler and more cross-platform.

    0 讨论(0)
  • 2020-12-31 15:39

    fclose() is function related with file streams. When you open file with the help of fopen() and assign stream to FILE *ptr. Then you will use fclose() to close the opened file.

    close() is a function related with file descriptors. When you open file with the help of open() and assign descriptor to int fd. Then you will use close() to close the opened file.

    The functions like fopen(), fclose() etc are C standard functions, while the other category of open(), close() etc are POSIX-specific. This means that code written with open(), close() etc is not a standard C code and hence non-portable. Whereas the code written with fopen(), fclose etc is a standard code and can be ported on any type of system.

    which one should I use?

    It depends on how you opened the file. If you open a file with fopen(), you should use fclose() and if you open file with open(), you should use close().

    If forked children have access to the file as well, what should they do when they are finished with the file?

    This is also dependent on where you made the fork() call: before opening the file or after opening it.

    See: Are file descriptors shared when fork()ing?

    See: man fclose and man close

    0 讨论(0)
  • 2020-12-31 15:46

    As for your second question, forked children have the same numeric file descriptor as the parent, but it's a copy; they can close it, and it will still be open for the parent and other children. (Though personally, I don't like to have files open when I fork()... I like to make that sort of shared resource usage explicit. Pipes, of course, are an exception.)

    0 讨论(0)
提交回复
热议问题