在我的 Android 设备上有一个名为/proc/net/unix
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'表示保存套接字状态的内部内核标志。目前,type 始终为“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内核源码匹配库存内核在这方面。因此,除非我弄错了,那个看起来像一列的数字实际上并不是一个单独的列。
您几乎可以为 UNIX 域套接字命名任何您想要的名称,只要总路径长度小于 108 字节即可。因此,您无法对这些路径的外观做出任何假设。选择这些名称的用户空间代码可能使用制表符后跟数字,甚至用空格将名称填充到一定长度。为了测试我的理论,您可以尝试查看/dev/socket/qmux_radio/
.