【发布时间】:2015-05-14 04:29:15
【问题描述】:
基本上,与在所需文件系统中创建临时文件、打开它然后取消链接的结果相同。
如果可以在不创建对其他进程可见的 inode 的情况下完成此操作,那就更好了,尽管不太可能。
【问题讨论】:
基本上,与在所需文件系统中创建临时文件、打开它然后取消链接的结果相同。
如果可以在不创建对其他进程可见的 inode 的情况下完成此操作,那就更好了,尽管不太可能。
【问题讨论】:
这样做的能力是特定于操作系统的,因为相关的 POSIX 函数调用都会导致生成链接。从 3.11 版开始,Linux 尤其允许在 open(2) 的 flags 参数中使用 O_TMPFILE,以便在给定目录中创建匿名文件。
【讨论】:
O_TMPFILE 实际上是在后台使用的,如果有的话,可以更好地实现tmpfile(3)(在我的回答中提到)。
您可以使用多种 POSIX API:
mkstemp - 生成一个唯一的临时文件名
模板,创建并打开文件,并返回一个打开的文件
文件的描述符。tmpfile - 打开一个唯一的二进制临时文件
读/写 (w+b) 模式。文件会自动删除
它已关闭或程序终止。这两个函数做 在文件系统上创建文件。如果要使用真实文件,创建 inode 是不可避免的。
第一个为您提供文件描述符,用于进行低级系统调用,例如read 和write。第二个为您提供所有<stdio.h> API 的FILE*。
如果您不需要/希望磁盘上的实际文件,您应该考虑 POSIX.1-2008 提供的memory stream APIs。
open_memstream() - 打开用于写入缓冲区的流。
缓冲区是动态分配的(与malloc(3) 一样),并且
根据需要自动增长。【讨论】:
libtmpfilefd : create a temporary unnamed file 似乎满足您的要求
查看source file这个函数用mkstemp创建一个临时文件然后在之后取消链接文件
【讨论】:
"This library function is part of Netpbm(1)." ...我从未听说过。这似乎是一个非常heavy 的解决方案,必须链接到这个“用于操作图形图像的工具包”只是为了创建临时文件。认为这是一个 -1 没有实际的反对票。