c.f.:
O_TMPFILE (since Linux 3.11) Create an unnamed temporary file. The pathname argument
specifiesa directory; an unnamed inode will be created in that directory's filesystem. Anything written to
the resulting file will be lost when the last file descriptor is closed, unless the file is
givena name.
O_TMPFILE must be specified with one of O_RDWR or O_WRONLY and, optionally, O_EXCL. If O_EXCL
isnot specified, then linkat(2) can be used to link the temporary file into the filesystem,
makingit 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);
In this case, the open() mode argument determines the file permission mode, as with O_CREAT.
Specifying O_EXCL in conjunction with O_TMPFILE prevents a temporary file from being linked
intothe filesystem in the above manner. (Note that the meaning of O_EXCL in this case is
differentfrom the meaning of O_EXCL otherwise.)
There are two main use cases for O_TMPFILE:
* Improved tmpfile(3) functionality: race-free creation of temporary files that (1) are
automaticallydeleted when closed; (2) can never be reached via any pathname; (3) are not
subjectto symlink attacks; and (4) do not require the caller to devise unique names.
* Creating a file that is initially invisible, which is then populated with data and
adjustedto have appropriate filesystem attributes (chown(2), chmod(2), fsetxattr(2),
etc.) before being atomically linked into the filesystem in a fully formed state (using linkat(2) as
described above).
O_TMPFILE requires support by the underlying filesystem; only a subset of Linux filesystems
providethat support. In the initial implementation, support was provided in the ext2, ext3,
ext4,UDF, Minix, and shmem filesystems. XFS support was added in Linux 3.15.