Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux macOS上getcwd返回的目录嵌套深度硬限制的原因是什么?如何规避?_Linux_Macos_Getcwd - Fatal编程技术网

Linux macOS上getcwd返回的目录嵌套深度硬限制的原因是什么?如何规避?

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

在linux和macOS上,目录可以嵌套到任意深度,如下C程序所示。但是,在macOS上而不是linux上,getcwd返回的嵌套级别似乎有一个硬限制,具体来说是256。当达到该限制时,getcwd返回enoint,这是一个相当奇怪的错误代码。这个限额是从哪里来的?有办法绕过它吗

#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);
查询它。源代码是。