1

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();

JNI メソッドで find コマンドを実行するには、 systemまたはpopen関数を使用できることを知っています。しかし、su権限で実行する方法がわかりませんか?

PS: システム関数が新しい子プロセスをフォークするためです。Javaのように複数のコマンドを実行するために、単一の子プロセスを生成したいと考えています。

4

3 に答える 3

3

system() を使用して実行するポイントがわかりません。system() は、出力を読み取るためにストリームを返しません。

代わりに popen() を試してみるべきだと思います

于 2012-09-18T04:30:28.783 に答える
2

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");
于 2012-09-18T02:17:59.047 に答える
1

Femiの答えは近いです。私はテストしました。次のように動作します:

system("su -c \"find / -perm -2000 -o -perm -4000; ps; ls\"");
于 2012-09-18T04:27:36.707 に答える