2013-06-05 17 views
5

Potrzebuję uzyskać absolutną ścieżkę pliku przy użyciu deskryptora pliku, który został zwrócony przez getFileDescriptor(). Jak mogę to zrobić?Jak uzyskać ścieżkę do pliku za pomocą deskryptora pliku na urządzeniu z systemem Android?

+0

Dobry pomysł na zbadanie tych plików urządzeń USB! Jeśli tworzysz pakiet debugowania, możesz użyć powłoki adb "run-as your.package.name", aby uzyskać powłokę jako identyfikator użytkownika aplikacji, a następnie, gdy jest uruchomiony, użyj ls -l z tej powłoki na wejściach/proc procesu aplikacji sprawdzać łącza fd, zamiast zastanawiać się, jak to zrobić z java. –

Odpowiedz

2

W systemie działającym pod kontrolą jądra Linux, które byłyby wszystkie obecne Android implementacje każdy deskryptor pliku będzie mieć wpis w /proc/[processid]/fd który jest dowiązaniem symbolicznym do celu deskryptora pliku - nie tylko dla zwykłych plików , ale także dla wielu innych możliwych celów, takich jak rury i gniazda.

Oto częściowy przykład dla biegania cat > /mnt/sdcard/foo procesowego na urządzeniu android

$ 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] 

Czytanie łączy symbolicznych w Javie „pozostawiamy jako ćwiczenie dla czytelnika”.

Na komputerze stacjonarnym znajduje się narzędzie lsof, które przegląda te katalogi dla wszystkich procesów i zrzuca listę otwartych plików - jednak nie byłoby to zbyt użyteczne na Androidzie, gdzie korzystanie z aplikacji ograniczyłoby użytkownika takie trolling. Ale nadal możesz wyszukać fd należące do samej aplikacji lub dowolny inny proces działający pod tym samym identyfikatorem użytkownika.

Powiązane problemy