Linux macOS上getcwd返回的目录嵌套深度硬限制的原因是什么?如何规避?
在linux和macOS上,目录可以嵌套到任意深度,如下C程序所示。但是,在macOS上而不是linux上,getcwd返回的嵌套级别似乎有一个硬限制,具体来说是256。当达到该限制时,getcwd返回enoint,这是一个相当奇怪的错误代码。这个限额是从哪里来的?有办法绕过它吗Linux macOS上getcwd返回的目录嵌套深度硬限制的原因是什么?如何规避?,linux,macos,getcwd,Linux,Macos,Getcwd,在linux和macOS上,目录可以嵌套到任意深度,如下C程序所示。但是,在macOS上而不是linux上,getcwd返回的嵌套级别似乎有一个硬限制,具体来说是256。当达到该限制时,getcwd返回enoint,这是一个相当奇怪的错误代码。这个限额是从哪里来的?有办法绕过它吗 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inclu
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
void fail(char *msg) { perror(msg); exit(1); }
void create_nested_dirs(int n) {
int i;
char name[10];
char cwd[10000];
if (chdir("/tmp") < 0) fail("chdir(\"/tmp\")");
for (i=2; i<=n; i++) {
sprintf(name, "%09d", i);
printf("%s\n",name);
if (mkdir(name, 0777) < 0 && errno != EEXIST) fail("mkdir");
if (chdir(name) < 0) fail("chdir(name)");
if (getcwd(cwd, sizeof(cwd)) == NULL) fail("getcwd");
printf("cwd = \"%s\" strlen(cwd)=%d\n", cwd, strlen(cwd));
}
}
int main() {
long ret = pathconf("/", _PC_PATH_MAX);
printf("PATH_MAX is %ld\n", ret);
create_nested_dirs(300);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
无效失败(char*msg){perror(msg);退出(1);}
void创建嵌套目录(int n){
int i;
字符名[10];
char-cwd[10000];
如果(chdir(“/tmp”)<0)失败(“chdir(\”/tmp\”));
对于(i=2;iIt似乎不是Posix;请参阅。我似乎记得OSX在PATH\u MAX
上有4K限制。但是,您可以在运行时使用long ret=PATH conf(name,\u PC\u PATH\u MAX);
查询它。源代码是。