If possible, set FD_CLOEXEC flag on file descriptors opened using

TemporaryFile.  This flag causes the fd to be closed on exec().
This commit is contained in:
Neil Schemenauer 2002-03-24 22:21:48 +00:00
parent 1c90d7ab3c
commit 153cc0fddc
1 changed files with 12 additions and 0 deletions

View File

@ -180,6 +180,17 @@ class TemporaryFileWrapper:
setattr(self, name, a)
return a
try:
import fcntl as _fcntl
def _set_cloexec(fd, flag=_fcntl.FD_CLOEXEC):
flags = _fcntl.fcntl(fd, _fcntl.F_GETFD, 0)
if flags >= 0:
# flags read successfully, modify
flags |= flag
_fcntl.fcntl(fd, _fcntl.F_SETFD, flags)
except (ImportError, AttributeError):
def _set_cloexec(fd):
pass
def TemporaryFile(mode='w+b', bufsize=-1, suffix=""):
"""Create and return a temporary file (opened read-write by default)."""
@ -187,6 +198,7 @@ def TemporaryFile(mode='w+b', bufsize=-1, suffix=""):
if os.name == 'posix':
# Unix -- be very careful
fd = os.open(name, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700)
_set_cloexec(fd)
try:
os.unlink(name)
return os.fdopen(fd, mode, bufsize)