【问题标题】:Creating Hardlinks and Symlinks in Android在 Android 中创建硬链接和符号链接
【发布时间】:2020-01-23 16:49:23
【问题描述】:

我正在创建一个应用程序,我想在其中使用 Android 外部存储器文件系统中的硬链接和符号链接。我试过使用命令

Os.link("oldpath", "newpath");
Os.link("oldpath", "newpath");

但是,当我尝试这个时,我得到了这个错误:

link failed: EPERM (Operation not permitted)

这让我觉得你需要 root 访问权限,尽管我见过其他人也这样做,而且我认为如果他们需要 root,他们不会有这些命令。有什么想法吗?

【问题讨论】:

  • 您尝试在哪个路径中创建硬链接。
  • 我认为你应该从这里检查步骤stackoverflow.com/a/30387667/3800377
  • @KamilMahmood 我正在尝试在外部存储上创建它
  • @AshwinKudva 你应该用更多细节更新你的问题。

标签: java android filesystems symlink hardlink


【解决方案1】:

调用 Os.link 失败,因为 Android 默认使用 FAT32 文件系统作为外部存储。 FAT32 文件系统不支持硬链接和软链接,这就是您收到 operation not allowed 错误的原因。

EPERM 包含 oldpath 和 newpath 的文件系统不支持 硬链接的创建。

您可以阅读更多关于link系统调用here

的信息

此外,您不能准确地伪造​​ FAT32 上的硬链接或软链接。另请注意,在 Android 中创建硬链接需要 root 权限。

【讨论】:

  • 那么有什么方法可以让我建立一个硬链接或类似的东西供我使用,或者我的案例是否没有实际意义? @KamilMahmood
  • 你能解释一下为什么最后一句话是真的吗?您通常应该只需要目录上的 rwx perms 和文件上的 rw。是不是因为您需要 root 才能访问任何非 FAT32 文件系统?
  • @Michael 您可以在没有 root 的情况下访问非 FAT32 文件系统。大多数情况下,/data/data/com.yourapp/ 位于非 FAT32 (ext4) 文件系统上,但即使在目录上有 rwx 并在文件上拥有 rw 之后,您仍然无法在其中创建硬链接。
【解决方案2】:

android Oreo(API 26) 为硬链接添加 Files.createLink 和 FileSystemProvider.createLink。

android lollipop(API 21) 为硬链接添加 Os.link

API 26 还添加了 LinkPermission("hard") 和 LinkPermission("symbolic"),但是我不知道怎么用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2010-10-21
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多