static int sony_get_bt_hostaddr(struct sony_sc *sc)
{
int ret;
char * envp[] = { "HOME=/", NULL };
char * argv[] = { "system/bin/sh", "-c", "su", "'/vendor/bin/btnvtool -x'", "&>", "/sdcard/bthostaddr.txt", NULL };
ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
printk("sony_get_bt_hostaddr %x", ret);
return 0;
}
shコマンドで出力を取得しようとすると、call_usermodehelper()
戻り値が0として返されるのは正しい結果であると推定されますが、単に停止しているように見え、"'/vendor/bin/btnvtool -x'"
argvの最後の部分が"&>", "/sdcard/bthostaddr.txt"
まったく実行されず、txtファイルが見つかりません。/sdcard/bthostaddr.txt
。
端末にコマンドを入力するとまったく問題はなく、system/bin/sh -c su '/vendor/bin/btnvtool -x' &> /sdcard/bthostaddr.txt
ファイルが生成され結果が表示btnvtool -x
されます。
(生成されたファイルから結果が' '
必要/vendor/bin/btnvtool -x
または取得されないため、コードから結果を模倣します。)
私のコードに実際にどんな問題がありますか?それとも、ファイルに0 / storesの代わりに正確な出力を返す他の方法はありますか?
(ps:コードは参照用にのみAndroid環境で実行されます。)