在Android上如何使用文件描述符获取文件路径?

10

我需要使用通过getFileDescriptor()返回的文件描述符来获取文件的绝对路径。 如何实现呢?


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

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的工具,可以遍历这些目录以获取所有进程并输出打开文件的列表 - 但是,在Android上使用每个应用程序用户ID将限制此类遍历的使用。 但是,您仍然可以查找属于您自己的应用程序或在相同用户ID下运行的任何其他进程的fd。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接