создание inode при создании pipe, fifo или socket - PullRequest
4 голосов
/ 29 июня 2011

У меня есть общий вопрос о Linux.Будет ли создан инод, если я создам fifo?труба?гнездо

Ответы [ 2 ]

5 голосов
/ 29 июня 2011

Никакой индекс не будет создан для анонимного канала или сокета, так как индекс является свойством файловой системы, и ни один из этих двух объектов не является сущностью файловой системы (у них нет пути к файлу).Они имеют только файловые дескрипторы.

Однако для именованных pipe (он же fifo) создается индекс, поскольку он живет как объект файловой системы.

2 голосов
/ 12 сентября 2018

В Linux ответ можно получить из каталога /proc/<PID>/fd.Цитируя документацию /proc ( man 5 proc ):

Для файловых дескрипторов для каналов и сокетов записи будут символическими ссылками, содержимое которых является типом файла с индексом,Вызов readlink (2) для этого файла возвращает строку в формате:

    type:[inode]

Например, сокет: [2248868] будет сокетом, а его индекс будет 2248868. Для сокетов этот индекс может бытьиспользуется для поиска дополнительной информации в одном из файлов в /proc/net/.

Давайте проверим, что:

$ bash -c 'true | ls -l /proc/self/fd/0'
lr-x------ 1 user user 64 Sep 13 03:58 /proc/self/fd/0 -> 'pipe:[54741]'

Так будет ли у труб и сокетов инод?Да !А как насчет FIFO?Мы можем догадаться, что, поскольку у них есть имя файла, у них есть inode (и я не думаю, что записи каталога без inode могут существовать).Но давайте проверим:

$ mkfifo foobar.fifo
$ ls -i foobar.fifo
1093642 foobar.fifo

Ответ "да, у FIFO тоже есть inode".

Однако возникает важный вопрос: inode - это свойства файловых систем, а inode не являются уникальными для файловых систем , так на какую файловую систему ссылаются, когда мы видим inode канала?Оказывается, существует pipefs виртуальная файловая система , которая смонтирована в пространстве ядра, а не в пространстве пользователя.Он управляет как каналами, так и FIFO, поэтому номер инода, который вы видите, является примером /proc и является свойством этих файловых систем, а не файловой системы, которую вы имеете на диске.И да, анонимные каналы и анонимные сокеты не будут иметь inode в файловой системе диска, потому что на диске нет имени файла и байтов (хотя может быть кеширование данных, а на самом деле старые Unixes кэшируют каналы на диск).FIFO и сокеты Unix-домена, однако, имеют имя файла в файловой системе, поэтому в примере foobar.fifo этот inode принадлежит файловой системе диска.

См. Также:

...