0

Android でネイティブ アプリケーションをコーディングしていますが、アプリケーションでデバイスのデフォルト ゲートウェイを取得する必要があります。デフォルトゲートウェイを取得するための現在のコードは次のとおりです。

static int get_default_gateway(char *def_gateway, int buf_size)
{
    FILE* pipe;
    char buffer[128];
    char result[2049];

    char cmd[] = "netstat -r | grep ^default | awk '{print $2}'";

    pipe = popen(cmd, "r");
    if (!pipe) return 1;

    memset(result, 0, sizeof(result));

    while(!feof(pipe)) {
        memset(buffer, 0, sizeof(buffer));
        if(fgets(buffer, 128, pipe) != NULL)
        {
              strcat(result, buffer);
        }       
    }
    pclose(pipe);

    memset(def_gateway, 0, buf_size);
    strncpy (def_gateway, result, buf_size );

    return 0;
}

私の LG p500 では動作しますが、一部のデバイスでは何も返されません。

私の質問は: popen() はアンドロイドで動作しますか? バイオニックには含まれていないとどこかで読みました。

デフォルトゲートウェイを取得する他の方法はありますか? JavaではなくCで書く必要があります。

ありがとうございました

4

1 に答える 1

1

はい、おそらく popen() はどの Android でも動作するはずです。しかし残念ながら、grep と awk ではありません。/proc/net/route を見てください。Destination が 00000000 に等しい行がデフォルト ゲートウェイです。また、おそらく NETLINK_ROUTE ソケットを使用できますが、私は使用したことがなく、これ以上は言えません。

この関連する質問も参照してください。

于 2011-11-21T12:08:31.057 に答える