Это номер инода для рассматриваемой трубы или сокета.
Канал - это однонаправленный канал с концом записи и концом чтения. В вашем примере, похоже, что FD 5 и FD 6 разговаривают друг с другом, поскольку номера инодов одинаковы. (Возможно, нет. См. Ниже.)
Более распространенным, чем наблюдение программы, говорящей с самим собой по каналу, является пара отдельных программ, взаимодействующих друг с другом, обычно потому, что вы устанавливаете канал между ними с помощью оболочки:
shell-1$ ls -lR / | less
Затем в другом окне терминала:
shell-2$ ...find the ls and less PIDs with ps; say 4242 and 4243 for this example...
shell-2$ ls -l /proc/4242/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 1 -> pipe:[222536390]
shell-2$ ls -l /proc/4243/fd | grep pipe
l-wx------ 1 user user 64 Mar 24 12:18 0 -> pipe:[222536390]
Это говорит о том, что стандартный выход PID 4242 (FD 1, по соглашению) подключен к каналу с номером инода 222536390, и что стандартный вход PID 4243 (FD 0) подключен к той же трубе.
Все это долгий способ сказать, что ls
вывод отправляется на less
вход.
Возвращаясь к вашему примеру, FD 1 и FD 2 почти наверняка не разговаривают друг с другом. Скорее всего, это результат связывания stdout (FD 1) и stderr (FD 2) вместе, поэтому они оба отправляются в один и тот же пункт назначения. Вы можете сделать это с помощью оболочки Bourne следующим образом:
$ some-program 2>&1 | some-other-program
Таким образом, если вы заглядываете внутрь /proc/$PID_OF_SOME_OTHER_PROGRAM/fd
, вы обнаружите третий FD, подключенный к каналу с тем же номером инода, что и для FD 1 и 2 для some-program
экземпляра. Это также может быть тем, что происходит с FD 5 и 6 в вашем примере, но у меня нет готовой теории, как эти два FD были связаны вместе. Вы должны знать, что программа делает внутри, чтобы понять это.
pidgin
- у него было много трубок, розеток и прочего, поэтому был хороший пример. Последний вопрос: inode специфичны только в контексте конкретной файловой системы, верно? Например, у меня может быть инод 3 в моей/
файловой системе и другой (другой) инод 3 в моей/boot
файловой системе./proc
файловой системы номера инодов просто создаются на лету (см.get_next_ino()
Вfs/inode.c
ядре), начиная с 0, когда система загружается заново. Механизм , который делает их разделяют несколько impersistent файловых систем для Linux (Proc, configfs, RamFs, AutoFS ...) , среди которых номера индексных дескрипторов являются уникальными , даже если семантика POSIX не требуют его. Это довольно частный случай, однако. Правило, о котором вы говорите, обычно упоминается в связи с обычными постоянными файловыми системами, такими как ext3.Для сокетов вы можете найти больше информации об inode
/proc/net/tcp
,/proc/net/udp
или/proc/net/unix
. Например:Мы видим, что индекс 53710569.
В этом случае это прослушивающий сокет (без удаленного адреса), который прослушивает локальный порт 27 (0x1B). IP-адреса имеют 4 байта в шестнадцатеричном формате в «сетевой нотации», вы можете использовать
inet_ntoa
функцию для преобразования ее в стандартную нотацию abcd (в данном случае 127.0.0.1).Обратите внимание, что эти файлы имеют размер 0 байт, но имеют содержимое, если вы их читаете. Также обратите внимание, что
-a
требуется с grep, так как они могут (например, сunix
) быть двоичными.источник
/proc/net/tcp6
и/proc/net/udp6
для IPv6.