/proc/net/unix
私のAndroidデバイスにはwho'sというファイルがあります。コンテンツ どちらにも合わない基準Linuxディストリビューション(Unixドメインソケットを表示)最初の数行:
Num RefCount Protocol Flags Type St Inode Path
00000000: 00000002 00000000 00000000 0002 01 5287581 /data/misc/wifi/sockets/wpa_ctrl_789-3189
00000000: 00000003 00000000 00000000 0001 03 6402 /dev/socket/qmux_radio/qmux_client_socket 297
00000000: 00000002 00000000 00010000 0001 01 7180 /dev/.secure_storage/ssd_socket
00000000: 00000002 00000000 00010000 0001 01 6424 /dev/socket/cnd
00000000: 00000002 00000000 00010000 0001 01 6400 @QMulticlient
...
(1)この異なる列は何を表していますか?
編集する:わかりました。これ:
ここで、「Num」はカーネルテーブルスロット番号、「RefCount」はソケットユーザ数、「Protocol」は現在常に0、「Flags」はソケットの状態を格納する内部カーネルフラグです。現在のタイプは常に「1」です(カーネルはまだUnixドメインデータグラムソケットをサポートしていません)。 「St」はソケットの内部状態で、Pathはソケットのバインディングパス(存在する場合)です。
しかし、これは最新の情報ではなく、type
「内部状態」が何を意味するのかについて明確な説明はありません。
(2) また、パスの末尾には、独自の列名のない追加番号がある場合もあります。それは何ですか?
また、それが生成されたカーネルソースコードではどこで見つけることができますか?
編集者:2016-04-27(解決する)
下記の回答ありがとうございます。lsof |grep qmux
その項目の最後の列の数字は次のようになりましたqmux_client_sockets
。PIDそれを使用するプロセスです。
答え1
このファイルを生成するコードは関数unix_seq_show()
にあります。net/unix/af_unix.c
カーネルソースコードから。見ているinclude/net/af_unix.h
どのデータ構造が使用されているかを確認することも役立ちます。
ソケットパスは常に出力の最後の列です。Androidカーネルのソースコードマッチ在庫コアこれに関して。したがって、私が間違っていない限り、列のように見える数字は実際には別の列ではありません。
合計パス長が108バイト未満の場合は、必要なほとんどすべての名前をUNIXドメインソケットに割り当てることができます。したがって、これらの経路がどのように見えるかについては、いかなる前提もできません。これらの名前を選択するユーザースペースコードは、タブの後に数字を使用するか、名前をスペースで特定の長さまで埋めることもできます。私の理論をテストするには/dev/socket/qmux_radio/
: