| @node futimens |
| @section @code{futimens} |
| @findex futimens |
| |
| POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html} |
| |
| Gnulib module: futimens |
| |
| Portability problems fixed by Gnulib: |
| @itemize |
| @item |
| This function is missing on some platforms: |
| glibc 2.5, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 10, Cygwin 1.5.x, mingw, MSVC 14, Android 4.3. |
| However, the replacement function may end up truncating timestamps to |
| worse resolution than supported by the file system. |
| @item |
| This function returns a bogus value instead of failing with |
| @code{ENOSYS} on some platforms: |
| Linux kernel 2.6.21. |
| @item |
| When using @code{UTIME_OMIT} or @code{UTIME_NOW}, some systems require |
| the @code{tv_sec} argument to be 0, and don't necessarily handle all |
| file permissions in the manner required by POSIX: |
| Linux kernel 2.6.25. |
| @item |
| When using @code{UTIME_OMIT} for the modification time, but specifying |
| an access time, some systems fail to update the change time: |
| Linux kernel 2.6.32, Solaris 11.1. |
| @item |
| Passing @code{AT_FDCWD} as the fd argument does not properly fail with |
| @code{EBADF} on some systems: |
| glibc 2.11, musl libc, Solaris 11. |
| @end itemize |
| |
| Portability problems not fixed by Gnulib: |
| @itemize |
| @item |
| Some platforms lack the ability to change the timestamps of a file |
| descriptor, so the replacement can fail with @code{ENOSYS}; the gnulib |
| module @samp{utimens} provides a more reliable interface @code{fdutimens}. |
| @item |
| The mere act of using @code{stat} modifies the access time of |
| directories on some platforms, so @code{utimensat} can only |
| effectively change directory modification time: |
| Cygwin 1.5.x. |
| @end itemize |