Hi
Does the cygwin tempfile() API use the Win32 FILE_ATTRIBUTE_TEMPORARY flag on the files it creates? Asking because that makes a fairly significant performance difference when creating very short lived temp files. Thanks, Noel Grandin -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple |
Hi Noel,
Noel Grandin via Cygwin wrote: > Hi > > Does the cygwin > tempfile() > API use the Win32 > FILE_ATTRIBUTE_TEMPORARY > flag on the files it creates? > > Asking because that makes a fairly significant performance difference when > creating very short lived temp files. Good question! If one specifies O_TMPFILE as one of the flags on an open() call, Cygwin does set that Win32 attribute as desired. Unfortunately, Cygwin's tmpfile() is supplied by newlib and it does not specify O_TMPFILE on its underlying open() call. That looks like a bug to me, unless I'm missing something subtle there; I'll submit a patch and find out. Thanks! ..mark -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple |
On 2021/01/06 11:44 am, Mark Geisert wrote:
> Hi Noel, > That looks like a bug to me, unless I'm missing something subtle there; I'll submit a patch and find out. > Thanks! > Cool thanks! -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple |
In reply to this post by Mark Geisert
On 2021-01-06 02:44, Mark Geisert wrote:
> Hi Noel, > > Noel Grandin via Cygwin wrote: >> Hi >> >> Does the cygwin >> tempfile() >> API use the Win32 >> FILE_ATTRIBUTE_TEMPORARY >> flag on the files it creates? >> >> Asking because that makes a fairly significant performance difference when >> creating very short lived temp files. > > Good question! If one specifies O_TMPFILE as one of the flags on an open() > call, Cygwin does set that Win32 attribute as desired. Unfortunately, Cygwin's > tmpfile() is supplied by newlib and it does not specify O_TMPFILE on its > underlying open() call. > > That looks like a bug to me, unless I'm missing something subtle there; I'll > submit a patch and find out. O_TMPFILE is only implemented under winsup/cygwin, and only defined for newlib under Cygwin: https://sourceware.org/git/?p=newlib-cygwin.git;a=blob;f=newlib/libc/include/sys/_default_fcntl.h see: https://sourceware.org/git/?p=newlib-cygwin.git;a=commitdiff;h=0aa99373c1d01b19a7f8ba53e8c7749358480f3e https://cygwin.com/pipermail/cygwin/2018-February/236018.html and: https://cygwin.com/pipermail/cygwin/2018-February/235869.html https://sourceware.org/git/?p=newlib-cygwin.git;a=commitdiff;h=7ae73be14194ccadc9a7557be33c3940ca4667cb You should allow linkat to reverse the applied attributes to make the file permanent, which may be taken care of in the patch above to fhandler_disk_file::link; from Linux open(2) see https://man7.org/linux/man-pages/man2/open.2.html: "O_TMPFILE must be specified with one of O_RDWR or O_WRONLY and, optionally, O_EXCL. If O_EXCL is not specified, then linkat(2) can be used to link the temporary file into the filesystem, making it permanent, using code like the following: char path[PATH_MAX]; fd = open("/path/to/dir", O_TMPFILE | O_RDWR, S_IRUSR | S_IWUSR); /* File I/O on 'fd'... */ snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd); linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file", AT_SYMLINK_FOLLOW); " although the implementation may not currently handle O_EXCL. -- Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada This email may be disturbing to some readers as it contains too much technical detail. Reader discretion is advised. [Data in binary units and prefixes, physical quantities in SI.] -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple |
Free forum by Nabble | Edit this page |