Есть ли лимит "глубины дерева каталога папок" в Windows , Linux или же в других ОС?
Интересно узнать есть ли лимит "глубины дерева каталога папок". Под лимитом глубины я понимаю число папок которые лежат в папке как на изображении снизу.
Если этот лимит есть то какой он в различных ОС?
Ответы (1 шт):
Попробовал в своем Linux
avp@avp-xubu2:~/hashcode$ uname -a
Linux avp-xubu2 4.15.0-147-generic #151-Ubuntu SMP Fri Jun 18 19:21:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
avp@avp-xubu2:~/hashcode$ cat /etc/issue
Ubuntu 18.04.5 LTS \n \l
avp@avp-xubu2:~/hashcode$
Создавал в текущем каталоге каталог с именем 1, переходил в него и повторял это в цикле.
На уровне 500000 мне надоело ждать и я остановил программу.
По ходу дела, при достижении уровня, кратного 10000 я вызывал system("df -h .");
(просто для какого-то контроля ситуации).
Начиная с уровня 70000 я получал сообщение -- sh: 1: df: Argument list too long
Похоже, что в Линукс глубина вложенности каталогов реально ограничена только количеством i-nodes в файловой системе.
У меня тут:
avp@avp-xubu2:~/hashcode$ df -ih .
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 6.3M 248K 6.1M 4% /
avp@avp-xubu2:~/hashcode$
P.S.
Эксперименты проводились вот таким кодом
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <limits.h>
#include <signal.h>
volatile int sig = 0;
void
sigh (int s)
{
sig = 1;
}
int
main (int ac, char *av[])
{
char s_path[1024];
printf("PATH_MAX = %d\n", PATH_MAX);
if (!getcwd(s_path, 1023)) {
perror("getcwd");
exit(1);
}
printf("initial dir: %s\n", s_path);
int l, n = atoi(av[1] ? av[1] : "100000");
if (n < 10)
n = 10;
int m = n > 10000 ? 10000 : 1000;
signal(SIGINT, sigh);
for (l = 0; l < n; l++) {
if (sig) {
printf("Level %d sigint detected\n", l);
break;
}
if (mkdir("1", 0777)) {
printf("mkdir level %d fail: %m\n", l);
break;
}
if (chdir("1")) {
printf("Can't chdir to ...%d.../'1' [%m]\n", l);
break;
}
if (l % m == 0) {
printf("level %d\n", l + 1);
system("df -h .");
}
}
printf("Level %d reached\n", l);
if (chdir(s_path)) {
printf("Can't chdir to %s [%m]\n", s_path);
exit(1);
}
int rc = system("rm -rf 1");
printf("system rm -rf '1' rc = %d\n", rc);
return rc == 0 ? (puts("End") == EOF) : rc;
}