Для большей части использования универсальные ядра хороши для фактически любых аппаратных средств. Дополнительно они обычно содержат (редактор), определенные для распределения патчи, настолько компилирующие Ваше собственное ядро, могут (мог) бы вызвать проблемы.
Причина скомпилировать Ваше собственное ядро:
Если бы я не использовал основанный на источнике дистрибутив, то я не скомпилировал бы ядро вообще.
Это - inode число для канала или рассматриваемого сокета.
Канал является однонаправленным каналом с концом записи и концом чтения. В Вашем примере похоже, что FD 5 и FD 6 говорят друг с другом, так как inode числа являются тем же. (Возможно, не, все же. Посмотрите ниже.)
Более распространенный, чем наблюдение программы, говорящей с собой по каналу, пара отдельных программ, говорящих друг с другом, обычно потому что Вы настраиваете канал между ними с оболочкой:
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]
Это говорит, что стандартный вывод 4242 PID (FD 1, условно) подключен к каналу с inode номером 222536390, и что вход стандарта 4243 PID (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
, Вы прилагается бы третий фарадей к каналу с тем же inode числом, как присоединен к FDs 1 и 2 для some-program
экземпляр. Это может также быть тем, что происходит с FDs 5 и 6 в Вашем примере, но у меня нет готовой теории, как эти два FDs были связаны. Необходимо было бы знать то, что программа делает внутренне для понимания этого.
Для сокетов можно найти больше информации о inode в /proc/net/tcp
, /proc/net/udp
или /proc/net/unix
. Например:
ls -l /proc/<pid>/fd
lrwx------ 1 root root 64 May 26 22:03 3 -> socket:[53710569]
Мы видим, что inode 53710569.
head -n1 < tcp ; grep -a 53710569 tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
155: 0100007F:001B 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 53710569 1 ffff88011f52c200 300 0 0 2 -1
В этом случае это - сокет слушания (никакой удаленный адрес), слушая на локальном порте 27 (0x1B). IP-адреса составляют 4 байта в шестнадцатеричном числе в "сетевой нотации", можно использовать inet_ntoa
функционируйте для преобразования его в стандарт a.b.c.d нотация (127.0.0.1 в этом случае).
Обратите внимание, что эти файлы, кажется, составляют 0 байтов, но иметь содержание при чтении их. Также отметьте это -a
требуется с grep, так как они могут (например, с unix
) кажись, быть двоичными.
pidgin
- это имело много каналов и сокетов и другого материала, хороший пример - также. Один последний вопрос: inodes конкретны только в контексте конкретной файловой системы, корректны? Как в, у меня мог быть inode 3 на моем/
файловая система и другой (другой) inode 3 на моем/boot
файловая система. – Thanatos 24.03.2011, 23:25/proc
файловая система, inode числа просто составлены на лету (см.get_next_ino()
вfs/inode.c
в ядре), запускающийся от 0, когда система недавно загружается. Механизм, который составляет их, совместно используется несколькими из impersistent файловых систем Linux (proc, configfs, ramfs, autofs...), среди которого inode числа уникальны даже при том, что семантика POSIX не требует это. Это - довольно особый случай, как бы то ни было. На правило, о котором Вы говорите, обычно ссылаются в связи с нормальными персистентными файловыми системами как ext3. – Warren Young 25.03.2011, 00:04