Что означает содержание / proc / net / unix?

11

На моем устройстве Android есть файл с именем /proc/net/unixwho, содержимое которого не соответствует содержимому любого стандартного дистрибутива 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 процесса, который его использует.

not2qubit
источник

Ответы:

6

Код, который генерирует этот файл, находится в unix_seq_show()функции net/unix/af_unix.cв исходном коде ядра . Глядя на include/net/af_unix.hэто также полезно, чтобы увидеть структуры данных в использовании.

Путь к сокету всегда является последним столбцом в выходных данных, и источник ядра Android соответствует стандартному ядру в этом отношении. Так что, если я не ошибаюсь, это число, которое выглядит как столбец, на самом деле не отдельный столбец.

Вы можете называть доменные сокеты UNIX практически любым именем, если общая длина пути меньше 108 байт. Таким образом, вы не можете делать какие-либо предположения относительно того, как эти пути будут выглядеть. Возможно, код пользовательского пространства, выбирающий эти имена, использует символ табуляции, за которым следует число, или даже дополняет имя до определенной длины пробелами. Чтобы проверить мою теорию, вы можете попробовать просмотреть файлы сокетов в /dev/socket/qmux_radio/.

Jander
источник
1
Спасибо, что сделал это! Номера сокетов не отображаются /dev/socket/qmux_radio/только под именем виртуального сокета qmux_client_socket. Но твоя помощь заставила меня проверить, psкакие же.
not2qubit