【问题标题】:How to get file path using file descriptor on Android?如何在Android上使用文件描述符获取文件路径?
【发布时间】:2013-06-05 10:36:39
【问题描述】:

我需要使用getFileDescriptor() 返回的文件描述符获取文件绝对路径。 我该怎么做?

【问题讨论】:

  • 调查那些 USB 设备文件的好主意!如果您构建一个调试 apk,您可以使用 adb shell 'run-as your.package.name' 获取一个 shell 作为应用程序的用户 ID,然后在它运行时在应用程序进程的 /proc 条目上使用该 shell 中的 ls -l检查 fd 链接,而不必从 java 中弄清楚如何这样做。
  • 克里斯你能详细解释一下吗,我也尝试从 java 代码中获取 USB OTG 路径,但我无法确定它的实际路径,因为谷歌对可移动设备有很多限制。

标签: java android file file-descriptor


【解决方案1】:

在 Linux 内核下运行的系统上,这将是所有 当前 Android 实现,每个文件描述符将在 /proc/[processid]/fd 中有一个条目,它是文件描述符目标的符号链接- 不仅适用于常规文件,还适用于许多其他可能的目标,例如管道和套接字。

这是在 Android 设备上运行的 cat > /mnt/sdcard/foo 进程的部分示例

$ ls -l /proc/3528/fd
lrwx------ shell    shell             2013-06-06 10:31 0 -> /dev/pts/1
l-wx------ shell    shell             2013-06-06 10:31 1 -> /mnt/sdcard/foo
lrwx------ shell    shell             2013-06-06 10:31 2 -> /dev/pts/1
lrwx------ shell    shell             2013-06-06 10:31 6 -> socket:[188850]

阅读 Java 中的符号链接“留给读者作为练习”。

在桌面 linux 上,有一个 lsof 工具,它可以在这些目录中查找所有进程并转储打开文件的列表 - 但是,这在使用每个应用程序用户 ID 的 Android 上不会太有用限制这种拖钓。但是您仍然可以查找属于您的应用程序本身的 fd,或者在同一用户 ID 下运行的任何其他进程。

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多