【问题标题】:Is it possible to create an unlinked file on a selected filesystem?是否可以在选定的文件系统上创建未链接的文件?
【发布时间】:2015-05-14 04:29:15
【问题描述】:

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

如果可以在不创建对其他进程可见的 inode 的情况下完成此操作,那就更好了,尽管不太可能。

【问题讨论】:

    标签: c linux inode


    【解决方案1】:

    这样做的能力是特定于操作系统的,因为相关的 POSIX 函数调用都会导致生成链接。从 3.11 版开始,Linux 尤其允许在 open(2)flags 参数中使用 O_TMPFILE,以便在给定目录中创建匿名文件。

    【讨论】:

    • 看起来O_TMPFILE 实际上是在后台使用的,如果有的话,可以更好地实现tmpfile(3)(在我的回答中提到)。
    【解决方案2】:

    您可以使用多种 POSIX API:

    • mkstemp - 生成一个唯一的临时文件名 模板,创建并打开文件,并返回一个打开的文件 文件的描述符。
    • tmpfile - 打开一个唯一的二进制临时文件 读/写 (w+b) 模式。文件会自动删除 它已关闭或程序终止。

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

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

    如果您不需要/希望磁盘上的实际文件,您应该考虑 POSIX.1-2008 提供的memory stream APIs

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

    【讨论】:

      【解决方案3】:

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

      查看source file这个函数用mkstemp创建一个临时文件然后在之后取消链接文件

      【讨论】:

      • "This library function is part of Netpbm(1)." ...我从未听说过。这似乎是一个非常heavy 的解决方案,必须链接到这个“用于操作图形图像的工具包”只是为了创建临时文件。认为这是一个 -1 没有实际的反对票。
      • @JonathonReinhart:这是几十年来没有人真正需要的古老工具之一。
      猜你喜欢
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2019-01-04
      • 2013-07-07
      • 1970-01-01
      • 2013-10-28
      相关资源
      最近更新 更多