not*_*bit 12 filesystems android proc unix-sockets
在我的 Android 设备上,有一个名为/proc/net/unix
who's content的文件 不符合任何标准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
...
Run Code Online (Sandbox Code Playgroud)
(1) 这些不同的列代表什么?
编辑:好的,我发现了这个:
这里'Num'是内核表槽号,'RefCount'是套接字的用户数,'Protocol'当前始终为0,'Flags'代表保持套接字状态的内部内核标志。当前,类型始终为“1”(内核尚不支持 Unix 域数据报套接字)。'St' 是套接字的内部状态,Path 是套接字的绑定路径(如果有)。
但是,这不是最新的,因为我们有一个type
并且没有澄清“内部状态”的含义。
(2) 同样在路径的末尾,有时会有一个没有自己列名的附加数字。那是什么?
此外,我可以在内核源代码中的哪个位置找到它的创建位置?
编辑:2016-04-27(已解决)
感谢下面的回答,我已经确认lsof |grep qmux
,qmux_client_sockets
项目最后一列中的数字是使用它的进程的PID。
生成此文件的代码位于内核源代码中的unix_seq_show()
函数中。查看也很有帮助,可以查看正在使用的数据结构。net/unix/af_unix.c
include/net/af_unix.h
套接字路径始终是输出中的最后一列,Android 内核源代码在这方面与库存内核相匹配。所以除非我弄错了,那个看起来像一列的数字实际上并不是一个单独的列。
只要总路径长度小于 108 字节,您几乎可以将 UNIX 域套接字命名为任何您想要的名称。因此,您无法对这些路径的外观做出任何假设。选择这些名称的用户空间代码可能使用制表符后跟数字,或者甚至用空格将名称填充到特定长度。为了测试我的理论,您可以尝试查看/dev/socket/qmux_radio/
.