当前位置: 首页 > 面试题库 >

重新链接匿名(未链接但打开)的文件

慕容弘懿
2023-03-14
问题内容

在Unix中,可以通过以下方式创建匿名文件的句柄,例如,使用creat()创建和打开该文件,然后使用unlink()删除目录链接-
剩下一个带有inode和存储的文件,但是没有办法重新打开它。这些文件通常用作临时文件(通常这是tmpfile()返回给您的)。

我的问题:有什么办法可以将这样的文件重新附加到目录结构中?如果可以这样做,则意味着您可以例如执行文件写入操作,以使文件看起来原子完整。这吸引了我的强迫性。;)

当浏览相关的系统调用函数时,我希望找到一个名为flink()的link()版本(与chmod()/ fchmod()比较),但至少在Linux上不存在。

告诉我如何创建匿名文件而无需在磁盘目录结构中短暂暴露文件名的好处。


问题答案:

flink()几年前提交了一个用于提议的Linux 系统调用的补丁,但是当Linus声明“在HELL中,没有其他重大入侵,我们无法安全地做到这一点”,这几乎结束了关于是否添加此问题的争论。

更新: 随着Linux 3.11的,现在可以创建具有不使用目录项文件open()与新的O_TMPFILE标志,并将其链接到文件系统一旦使用完全形成linkat()/proc/self/fd/ FDAT_SYMLINK_FOLLOW标志。

open()手册页上提供了以下示例:

    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);

请注意,使用linkat()删除最后一个链接后,将不允许重新打开文件unlink()



 类似资料:
  • 我尝试了各种方法来打开在.js文件中导入的.ftl文件中的新窗口中的链接,但都不成功。 下面是.js中的代码

  • 问题内容: 我正在尝试使用$ state.go函数实现“在新标签页中打开链接”功能。如果有这样的东西,那就太棒了: 有没有办法使用AngularJS做到这一点? 问题答案: 更新:好的,我只是使用以下代码解决了它:

  • 问题内容: 如何通过单击任何链接打开本地文件夹视图? 我尝试了很多选择 要么 要么 问题答案: 由于安全性限制,在所有现代浏览器中都禁止链接到本地​​资源。 对于Firefox: 为了安全起见,Mozilla应用程序阻止从远程文件到本地文件(和目录)的链接。这包括链接到硬盘驱动器,映射的网络驱动器上的文件,以及通过统一命名约定(UNC)路径访问的文件。这样可以避免许多不愉快的可能性,包括: 允许站

  • 问题内容: 我有以下使用Vaadin编写的代码。当用户单击按钮时,代码将打开页面。 我的问题是我有什么办法指定要在新标签页中打开页面吗? 谢谢。 问题答案: 该窗口的名字是很重要的位置。要注意的是,你还可以有一个浏览器 将 可以在新窗口中打开资源来代替。 该方法还有另一个签名,即 可能符合要求。HTH。 参考:Page(Vaadin 7.2.1 API) 。

  • 将匿名帐户转换为永久帐户的文档指出了流程的3个步骤,但是步骤2似乎违反了步骤1。 当用户注册时,完成用户身份验证提供者的登录流程,直到(但不包括)调用其中一个身份验证提供者。用方法来表示。例如,获取用户的Google ID令牌、Facebook访问令牌或电子邮件地址和密码 获取新身份验证提供程序的身份验证凭据:

  • 问题内容: 这个问题已经在这里有了答案 : Target =’_ blank’以显示在新窗口中,而不是新标签中,可能吗? (9个答案) 5年前关闭。 有没有一种方法可以使链接在不使用JavaScript的情况下打开新的浏览器窗口(而非标签页)? 问题答案: 使用纯HTML 不能影响这一点-每个现代的浏览器(=用户)都可以完全控制此行为,因为它过去曾被滥用很多。 HTML选项 您可以打开一个新窗口(