Jest to numer i- węzła dla danej rury lub gniazda.
Potok jest kanałem jednokierunkowym z końcem zapisu i końcem odczytu. W twoim przykładzie wygląda na to, że FD 5 i FD 6 rozmawiają ze sobą, ponieważ numery i-węzłów są takie same. (Może jednak nie. Zobacz poniżej.)
Bardziej powszechne niż oglądanie programu rozmawiającego z sobą przez potok jest para oddzielnych programów rozmawiających ze sobą, zwykle dlatego, że konfigurujesz potok między nimi za pomocą powłoki:
shell-1$ ls -lR / | less
Następnie w innym oknie terminala:
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]
Oznacza to, że standardowe wyjście PID 4242 (FD 1, zgodnie z konwencją) jest podłączone do rury o numerze i-węzła 222536390, a standardowe wejście PID 4243 (FD 0) jest podłączone do tej samej rury.
Wszystko to stanowi długą drogę do stwierdzenia, że ls
dane wyjściowe są wysyłane do less
danych wejściowych.
Wracając do twojego przykładu, FD 1 i FD 2 prawie na pewno nie rozmawiają ze sobą. Najprawdopodobniej jest to wynik połączenia stdout (FD 1) i stderr (FD 2), więc obaj idą do tego samego miejsca docelowego. Możesz to zrobić za pomocą takiej powłoki Bourne'a:
$ some-program 2>&1 | some-other-program
Tak więc, jeśli zajrzysz do środka /proc/$PID_OF_SOME_OTHER_PROGRAM/fd
, znajdziesz trzecią FD dołączoną do rury o takim samym numerze i-węzła, jak dla FD 1 i 2 dla some-program
instancji. Być może tak dzieje się w przypadku twojego FD 5 i 6, ale nie mam gotowej teorii, w jaki sposób te dwa FD zostały ze sobą powiązane. Musisz dowiedzieć się, co program robi wewnętrznie, aby to zrozumieć.
pidgin
- miał wiele rur i gniazd i innych rzeczy, więc był to dobry przykład. Ostatnie pytanie: i-węzły są specyficzne tylko w kontekście konkretnego systemu plików, prawda? W tej chwili mógłbym mieć i-węzeł 3 w moim/
systemie plików, a inny (inny) i-węzeł 3 w moim/boot
systemie plików./proc
systemu plików numery i-węzłów są tworzone w locie (patrzget_next_ino()
wfs/inode.c
jądrze), zaczynając od 0, gdy system jest świeżo uruchamiany. Mechanizm, który je tworzy, jest współużytkowany przez kilka nieistotnych systemów plików Linuksa (proc, configfs, ramfs, autofs ...), wśród których numery i-węzłów są unikalne, chociaż semantyka POSIX tego nie wymaga. To jednak dość szczególny przypadek. Reguła, o której mówisz, jest zwykle przywoływana w połączeniu z normalnymi trwałymi systemami plików, takimi jak ext3.Dla gniazd można znaleźć więcej informacji na temat węzła w
/proc/net/tcp
,/proc/net/udp
lub/proc/net/unix
. Na przykład:Widzimy, że i-węzeł to 53710569.
W tym przypadku jest to gniazdo nasłuchujące (brak adresu zdalnego), nasłuchujące na lokalnym porcie 27 (0x1B). Adres IP ma 4 bajty szesnastkowe w „notacji sieciowej”, możesz użyć
inet_ntoa
funkcji do konwersji na standardową notację abcd (w tym przypadku 127.0.0.1).Zauważ, że te pliki wydają się mieć 0 bajtów, ale mają treść, jeśli je czytasz. Zauważ też, że
-a
jest to wymagane w przypadku grep, ponieważ mogą (np. Zunix
) wyglądać na binarne.źródło
/proc/net/tcp6
i/proc/net/udp6
dla IPv6.