Сколько записей создается при создании нового каталога в *, отклоняют?

Можно использовать Пакет C/C++ Netbeans, которые работают с G ++/GCC:

netbeans.org/features/cpp

2
20.12.2018, 22:56
2 ответа

В пустом каталоге:

% stat .
  File: `.'
  Size: 6               Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 537317737   Links: 2
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:20.935036074 +0100
Change: 2011-02-22 08:47:20.935036074 +0100
 Birth: -
% mkdir foo
% stat .
  File: `.'
  Size: 16              Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 537317737   Links: 3
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:20.935036074 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
 Birth: -
% stat foo
  File: `foo'
  Size: 6               Blocks: 0          IO Block: 4096   directory
Device: fe04h/65028d    Inode: 509269      Links: 2
Access: (0750/drwxr-x---)  Uid: ( 1000/stribika)   Gid: (  100/   users)
Access: 2011-02-22 08:47:57.465036072 +0100
Modify: 2011-02-22 08:47:57.465036072 +0100
Change: 2011-02-22 08:47:57.465036072 +0100
 Birth: -

Поскольку Вы видите, что существует 2 ссылки на пустой каталог. Когда я создаю новый в нем, число каналов увеличивается до 3. Additionaly там являются 2 ссылками на новый каталог. Общее количество является 3 новыми ссылками.

Это вызвано тем, что каждый каталог имеет ссылку на себя (.) и ее родителя (..).

3
27.01.2020, 21:55
  • 1
    мне нравится ответ Gilles лучше - совершенно новый каталог, имеет две ссылки на него, но создание нового каталога создает три новых записи в файловой системе: . и .. в новом каталоге и фактической ссылке на новый каталог, в его родительском каталоге. –  AlexWebr 10.08.2012, 23:29

В исходной реализации Unix, для хранения кода файловой системы в ядре простым, программы управления каталогом сделали некоторую дополнительную работу: в частности, mkdir /parent/a созданный запись для a в /parent, плюс названная запись . в a (указывающий a самостоятельно) и названная запись .. в a (указывающий /parent¹).

Довольно скоро код для mkdir и друзья, перемещенные в ядро так или иначе, но формат файловой системы, продолжали иметь явный . и .. записи, который код обхода файловой системы, найденный по имени (в противоположность наличию двух указателей специального формата в каждом каталоге).

В наше время, некоторые (большинство?) файловые системы фальсифицируют его: каталоги на самом деле не имеют . и .. записи на диске, они сгенерированы драйвером. Однако с точки зрения пользователя, это прозрачно. Число каналов каталога все еще два плюс количество подкаталогов (запись в родителе, собственный каталог ., и каждый подкаталог ..). В частности, пустой каталог имеет число каналов два (т.е. существует две записи в файловой системе, указывающей на него), но создающий его создает три записи (третий .. который указывает на родителя).

¹ ссылкой, не по имени. Таким образом, если Вы переименовываете /parent, a .. продолжает указывать aродительский каталог, везде, куда это перемещается в в структуре файловой системы.

3
27.01.2020, 21:55

Теги

Похожие вопросы