是否可以在选定的文件系统上创建未链接的文件?

Is it possible to create an unlinked file on a selected filesystem?

基本上,与在所需文件系统中创建临时文件、打开它然后取消链接的结果相同。

如果不创建对其他进程可见的 inode 就可以做到这一点,那就更好了,尽管不太可能。

有几个 POSIX API 可供您使用:

  • mkstemp - 从中​​生成一个唯一的临时文件名 模板,创建并打开文件,returns 一个打开的文件 文件的描述符。
  • tmpfile - 打开一个唯一的二进制临时文件 read/write (w+b) 模式。该文件将被自动删除时 它已关闭或程序终止。

这两个函数 do 在文件系统上创建文件。如果要使用真实文件,创建inode是不可避免的。

第一个为您提供了一个 文件描述符 用于进行低级系统调用,例如 readwrite。第二个为所有 <stdio.h> API 提供 FILE*

如果您没有 need/desire 磁盘上的 实际 文件,您应该考虑 POSIX 提供的 memory stream APIs。1- 2008.

  • open_memstream() - 打开用于写入缓冲区的流。 缓冲区是动态分配的(与 malloc(3) 一样),并且 根据需要自动增长。

libtmpfilefd : create a temporary unnamed file 似乎可以满足您的要求

查看 source file 此函数使用 mkstemp 创建一个临时文件,然后在

之后立即取消链接该文件

这样做的能力是 OS 特定的,因为相关的 POSIX 函数调用都会导致生成 link。 Linux 特别允许,自版本 3.11 起,在 open(2)flags 参数中使用 O_TMPFILE 以便在给定目录中创建匿名文件。