What does the FD_CLOEXEC fcntl() flag do?

前端 未结 2 1665
感动是毒
感动是毒 2020-11-28 04:24

Like so:

if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...

Though I\'ve read man fcntl, I can\'t figure out what it does.

相关标签:
2条回答
  • 2020-11-28 05:07

    It marks the file descriptor so that it will be close()d automatically when the process or any children it fork()s calls one of the exec*() family of functions. This is useful to keep from leaking your file descriptors to random programs run by e.g. system().

    0 讨论(0)
  • 2020-11-28 05:19

    It sets the close-on-exec flag for the file descriptor, which causes the file descriptor to be automatically (and atomically) closed when any of the exec-family functions succeed.

    It also tests the return value to see if the operation failed, which is rather useless if the file descriptor is valid, since there is no condition under which this operation should fail on a valid file descriptor.

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