В Java у меня может быть что-то вроде этого:
Process p = Runtime.getRuntime().exec("su");
DataOutputStream pOut = new DataOutputStream(p.getOutputStream());
pOut.writeBytes("find / -perm -2000 -o -perm -4000\n");
pOut.writeBytes("ps\n");
pOut.writeBytes("ls\n");
pOut.writeBytes("exit\n");
pOut.flush();
p.waitFor();
Я знаю, что для выполнения команды find в JNI-методе мы можем использовать функцию system или popen. Но я не знаю, как выполнить его с привилегиями su?
PS: Так как системная функция создает новый дочерний процесс. Я хочу, чтобы один дочерний процесс появлялся для выполнения нескольких команд, например, в Java.
Ответ Femi близок, я тестировал, для меня работает следующее:
system("su -c \"find / -perm -2000 -o -perm -4000; ps; ls\"");
Я не вижу смысла использовать System() для выполнения, system() не возвращает вам поток для чтения вывода.
Я думаю, вы должны попробовать popen() вместо
Предполагая, что на вашем Android-устройстве установлен su
, и он находится на пути, вы можете попробовать его следующим образом:
system("su -c \"find / -perm -2000 -o -perm -4000\" root");
su
принимает аргументы: аргумент -c
указывает команду для запуска.
РЕДАКТИРОВАТЬ: вам может быть не повезло. Я не уверен, можете ли вы передать несколько команд команде su
. Вы можете уйти с передачей его оболочки, а затем передать команды оболочки, но никаких гарантий нет.
system("su -c \"sh -c 'find / -perm -2000 -o -perm -4000; rm /tmp/1'\" root");