私のAndroidデバイスには、/proc/net/unix
というファイルがあります content はどの standard 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)これらの異なる列は何を表していますか?
[〜#〜] edit [〜#〜]:Ok見つかりました this :
ここで、「Num」はカーネルテーブルのスロット番号、「RefCount」はソケットのユーザー数、「Protocol」は現在常に0、「Flags」はソケットのステータスを保持する内部カーネルフラグを表します。現在、タイプは常に「1」です(Unixドメインのデータグラムソケットはまだカーネルでサポートされていません)。 'St'はソケットの内部状態であり、Pathはソケットのバインドパス(存在する場合)です。
ただし、type
があり、「内部状態」の意味を明確にしていないため、これは最新ではありません。
(2)また、パスの最後に、独自の列名のない番号が追加されることがあります。それは何ですか?
さらに、カーネルソースコードのどこに作成されたのか、どこでわかると思いますか?
編集:2016-04-27(解決済み)
以下の回答のおかげで、私はlsof |grep qmux
を通じて、qmux_client_sockets
アイテムの最後の列の番号が[〜#〜] pid [〜であることを確認しましたそれを使用するプロセスの#〜]。
このファイルを生成するコードは、 _net/unix/af_unix.c
_ in the kernel source のunix_seq_show()
関数にあります。 _include/net/af_unix.h
_ を見ることも、使用中のデータ構造を確認するのに役立ちます。
ソケットパスは常に出力の最後の列であり、この点で Androidカーネルソース は ストックカーネル と一致します。したがって、私が誤解しない限り、列のように見えるその数値は、実際には別の列ではありません。
パスの合計の長さが108バイト未満である限り、UNIXドメインソケットには実質的に任意の名前を付けることができます。したがって、これらのパスがどのようになるかについては、何も想定できません。それらの名前を選択するユーザースペースコードが、タブ文字とそれに続く数字を使用しているか、または名前をスペースで特定の長さに埋め込むことさえ可能です。私の理論をテストするには、_/dev/socket/qmux_radio/
_のソケットファイルを確認してみてください。