2

すべてのインターフェイスとアプリケーションのトラフィック統計を記録する Android ICS の /proc/net/xt_qtaguid/stats を読みたいです。以下はコード スニペットです。

String line = null;
BufferReader reader = new BufferedReader(new FileReader(new File("/proc/net/xt_qtaguid/stats")));

line = reader.readLine();/*Here I can read the 1st line correctly, it return "idx  iface acct_tag_hex..."*/
splitLine(line, keys);
line = reader.readLine();//!!!!!Read next line, it returns null!!!!!!

このファイルを cat すると、次のように表示されます。

idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_bytes_other_bytes_other_packets_bytes

2 rmnet0 0x0 0 0 6266 105 8882 121 1428 30 4838 75 0 0 208 4 2552 44 6122 73

3 rmnet0 0x0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

4 rmnet0 0x0 1000 0 0 0 2262 39 0 0 0 0 0 0 0 2262 39 0 0

5 rmnet0 0x0 1000 1 0 0 290 5 0 0 0 0 0 0 0 290 5 0 0

6 rmnet0 0x0 10004 0 1000 0 0 0 0 0 0 0 0 0 0 0 0

7 rmnet0 0x0 10004 1 20177 36 7037 81 20177 36 0 0 0 7037 81 0 0 0 0

そして、NetworkStatsFactory.java(Androidオリジナルクラス)もこのファイルを読み込んで同じメソッドを使っていることがわかりました。このクラスを使用しようとしましたが、正しく読み取れません:

try{
    NetworkStats stats = new NetworkStatsFactory().readNetworkStatsDetail(10004);
    stats.size();//size is ZERO!
}
catch(IllegalStateException e){
    //Do nothing
}

Google のエンジニアも同じ間違いを犯しましたか? :)

4

1 に答える 1

8

私は答えを得ました。この仮想ファイルの read_proc 関数は uid を制限し、すべてのアプリケーションはヘッダーとそれ自体の行しか読み取ることができません。

于 2012-02-03T07:46:54.423 に答える