Mac OS X Lion:最大路径长度是多少?

21

我在寻找这些信息时遇到了困难,试错告诉我该值非常高。我想问问社区是否有人知道并能指向一个苹果页面来确认Lion的长度。 我所知道的就是它比Snow Leopard更大。


2
我要冒险说,任何接近这一限制的应用程序都是一个非常糟糕的想法。 - jonmorgan
6
@spookyjon 你没有理解重点,Windows系统中该值为248,在10.6版本中为250,在Lion版本中似乎要大得多。它是关于测试极限以确保不违反它们,但要了解这些边界,你需要知道它们的范围。你对某些你完全不了解的事情做出了假设,而且重要的并不是我为什么提问,而是因为你个人认为我的假设是错误的就对其进行贬低评价,这才是真正糟糕的。 - Rodney S. Foley
最大文件名长度在10.6 255,并且最大路径长度为“无限制”,不会期望在Lion中变小... - Yahia
另一个提示似乎是维基百科 - http://en.wikipedia.org/wiki/Comparison_of_file_systems - Yahia
@Yahia,这就是为什么我回答了文件系统问题,并指出它是Lion的默认设置,与之前评论中的确切设置相同。 - Rodney S. Foley
显示剩余7条评论
4个回答

13

虽然有点老,但我找到了答案:

#include <sys/syslimits.h>

然后它将作为#define拥有一个PATH_MAX常量。 在我的情况下,

char filenameBuffer [PATH_MAX];

您可以将1024硬编码为最大路径,但是使用这样的常量使您的代码随着新版本的发布而可扩展。


3
请注意,NAME_MAX 也是单个文件名的限制。 - CyberSkull
1
从实验中,我发现对于给定的文件,使用长度为1016的路径是可行的,而使用长度为1017的路径则不行,这似乎与该常量以及所有文档的描述相矛盾。 - Hakanai

9
限制取决于所使用的文件系统 - OSX 默认使用 HFS Plus ...
我唯一能够提供的官方文件是 HFS Plus 规范,其中规定了文件名长度上限为255个字符。 维基百科 暗示 HFS Plus 的最大路径长度是“无限的”。
也许联系 Apple Dev 支持是获得关于限制确切声明的最可靠方式。

8

经过在Mac OS X Yosemite上的实际测试,最大路径长度为1016个字符。1017个字符则失败。


已在Sierra上测试,最大路径长度似乎不是无限的。 - Protongun
4
注意,/tmp、/etc和/var是指向/private/tmp、/private/etc和/private/var的符号链接。如果您尝试在这些目录中创建文件,您将能够创建大小为(1024-len(/private))的路径,也就是1016个字符。 - Harichandan Pulagam
@HarichandanPulagam 非常好的观点。符号链接在这里彻底改变了情况。 - Paul Sanders

5

将以下命令复制并粘贴到MacOSX的终端应用程序(或iTerm2、xterm或类似应用程序)中:

bash$ cc -dM -E -xc - <<< '#include <sys/syslimits.h>' | grep -i ' [NP]A.._MAX'

按下⟨return⟩⟨enter⟩键运行它,获得结果:

#define NAME_MAX 255
#define PATH_MAX 1024

这些最大的名称和路径长度在系统头文件sys/syslimits.h中定义,cc(C编译器)从一些默认位置(如/usr/include/或Xcode应用程序中的某个位置)读取此文件。这些晦涩的开关在man cc文档中有说明,但基本上这个示例编译了一个单行程序并将所有“宏”定义打印到一个管道(pipe)中,以使用grep过滤出我们想看到的行。跟着man grep进入正则表达式的模式匹配的细节之中。同样地,bash$ cc -dM -E -xc - <<<''编译一个空程序,并打印对于这个特定系统和编译器的所有标准“宏”定义——值得一看。

2
虽然这段代码片段是受欢迎的,可能会提供一些帮助,但如果它包括解释“如何”和“为什么”解决问题,那将会大有改进。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。 - Aniket G
bash$ (cd /tmp && cc -xc - && (./a.out; echo \$? = $?)) <<< 'int main(){return sizeof (long);}' 打印出 long 整数的字节数。 - Devon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接