tempname.mktemp functionality deprecation

eryk sun eryksun at gmail.com
Mon May 1 03:50:35 EDT 2017


On Sat, Apr 29, 2017 at 6:45 PM, Tim Chase
<python.list at tim.thechases.com> wrote:
> Working on some deduplication code, I want do my my best at
> performing an atomic re-hard-linking atop an existing file, akin to
> "ln -f source.txt dest.txt"
>
> However, when I issue
>
>   os.link("source.txt", "dest.txt")
>
> it fails with an OSError (EEXISTS).  This isn't surprising as it's
> documented.  Unfortunately, os.link doesn't support something like
>
>   os.link("source.txt", "dest.txt", force=True)

FYI, on Windows this is possible if you use the NTAPI functions
NtOpenFile and NtSetInformationFile instead of WinAPI CreateHardLink.
Using the NT API can also support src_dir_fd, dst_dir_fd, and
follow_symlinks=True [1]. I have a prototype that uses ctypes. I named
this parameter "replace_existing". It's atomic, but it will fail if
the destination is open. An open file can't be unlinked on Windows.

[1]: MSDN claims that "if the path points to a symbolic link, the function
     [CreateHardLink] creates a hard link to the target". Unless I'm
     misreading, this statement is wrong because it actually links to the
     symlink, i.e. the reparse point.



More information about the Python-list mailing list