Make a unique filesystem path, without creating the file
alan at csail.mit.edu
Mon Feb 29 00:47:54 EST 2016
Cameron Simpson <cs at zip.com.au> writes:
> On 22Feb2016 12:34, Alan Bawden <alan at csail.mit.edu> wrote:
I have deleted the part of discussion where it seems that we must simply
agree to disagree. You think mktemp() is _way_ more dangerous that I
>>> In fact your use case isn't safe, because _another_ task using mktemp
>>> in conflict as a plain old temporary file may grab your fifo.
>>But here in very last sentence I really must disagree. If the code I
>>wrote above is "unsafe" because some _other_ process might be using
>>mktemp() badly and stumble over the same path, then the current
>>implementation of tempfile.mkdtemp() is also "unsafe" for exactly the
>>same reason: some other process using mktemp() badly to create its own
>>directory might accidentally grab the same directory.
> When the other taks goes mkdir with the generated name it will fail, so no.
Quite right. I sabotaged my own argument by picking mkdtemp() instead
of mkstemp(). I was trying to shorten my text by taking advantage of
the fact that I had _already_ mentioned that mkdtemp() performs exactly
the same generate-and-open loop than the code I had written. I
apologize for the confusion.
In fact, mkstemp() also performs that same generate-and-open loop, and of
course it is careful to use os.O_EXCL along with os.O_CREAT when it
opens the file. So let me re-state my argument using mkstemp() instead:
If the code I wrote in my original message is "unsafe" because some
_other_ process might be using mktemp() badly and stumble over the same
path, then the current implementation of tempfile.mkstemp() is also
"unsafe" for exactly the same reason: some other process badly using
mktemp() to create its own file might accidentally grab the same file.
In other words, if that other process does:
path = mktemp()
tmpfp = open(path, "w")
Then yes indeed, it might accidentally grab my fifo when I used my
original code for making a temporary fifo. But it might _also_ succeed
in grabbing any temporary files I make using tempfile.mkstemp()! So if
you think what I wrote is "unsafe", it seems that you must conclude that
the standard tempfile.mkstemp() is exactly as "unsafe". So is that what
More information about the Python-list