open
====

POSIX specification:
 https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html

Gnulib module: open, fchdir

Portability problems fixed by the Gnulib module open:

  * Some platforms do not support O_CLOEXEC: 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, mingw, MSVC 14.

  * On platforms where off_t is a 32-bit type, open may not work correctly with files larger than 2 GB.  (Cf. AC_SYS_LARGEFILE.)

  * This function does not fail when the file name argument ends in a slash and (without the slash) names a nonexistent file or a file that is not a directory, on some platforms: FreeBSD 7.2, AIX 7.1, HP-UX 11.00, Solaris 9.

  * This function does not support the O_NONBLOCK flag when it is defined by the gnulib module nonblocking on some platforms: mingw, MSVC 14.

  * On Windows platforms (excluding Cygwin), this function does usually not recognize the /dev/null filename.

Portability problems fixed by the Gnulib module fchdir:

  * On Windows platforms (excluding Cygwin), this function fails to open a read-only descriptor for directories.

Portability problems not fixed by Gnulib:

  * The Gnulib replacement for O_CLOEXEC is not atomic, and so is not safe in the presence of multiple threads or signal handlers.

  * open ("symlink", O_NOFOLLOW ...) fails with errno set to EMLINK instead of the POSIX-required ELOOP on some platforms: FreeBSD 10.1.

  * open ("symlink", O_NOFOLLOW ...) fails with errno set to EFTYPE instead of the POSIX-required ELOOP on some platforms: NetBSD 6.1.

  * On Windows, this function returns a file handle in O_TEXT mode by default; this means that it translates '\n' to CR/LF by default.  Use the O_BINARY flag if you need reliable binary I/O.