【问题标题】:Mac OS X Lion: What is the max path length?Mac OS X Lion:最大路径长度是多少?
【发布时间】:2011-10-31 17:15:40
【问题描述】:

我无法找到此信息,反复试验告诉我价值非常高。我想我会询问社区是否有人知道并可以将我指向一个确认 Lion 长度的苹果页面。我只知道它比雪豹更大。

【问题讨论】:

  • 我会冒昧地说,任何远程接近此限制的应用程序都是一个非常糟糕的主意。
  • @spookyjon:+1。也可能依赖于文件系统。
  • @spookyjon 你没抓住重点,在 Windows 中是 248,在 10.6 中是 250,在 Lion 中它似乎要大得多。这是关于测试限制以确保您不违反它们,但要知道您需要知道边界是什么。你正在对一些你不知道的事情做出假设,这并不重要我为什么要问一个问题,但要否决它,因为你个人不同意你所做的事情,因为假设真的很糟糕。
  • @Donal 文件系统将是 Lion 的默认文件系统,即 Mac OS Extended (Journaled)
  • 最大文件名长度为 10.6 255,最大路径长度为“无限” - 没想到 Lion 会变得更小...

标签: macos path filesystems osx-lion


【解决方案1】:

老了,但我找到了答案:

#include <sys/syslimits.h>

然后它将有一个PATH_MAX 常量作为#define。就我而言,

char filenameBuffer [PATH_MAX];

您可以将 1024 硬编码为最大路径,但使用这样的常量会使您的代码在新版本中可扩展

【讨论】:

  • 还要记住NAME_MAX 也是单个文件名的限制。
  • 从实验中,我发现对于给定的文件,使用长度为 1016 的路径有效,而长度为 1017 的路径无效,这似乎与该常量以及所有文档相矛盾。
【解决方案2】:

限制取决于使用的文件系统 - OSX 默认使用 HFS Plus...

我能指出的唯一官方文档是HFS Plus spec,它记录了文件名长度限制为 255。

Wikipedia 暗示 HFS Plus 上的最大路径长度是“无限的”。

也许联系 Apple 开发支持是获取有关限制的准确声明的最可靠方法。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 也在 Sierra 上测试过,最大路径长度似乎不是无限的
    • 请注意,/tmp、/etc 和 /var 是 /private/tmp、/private/etc 和 /private/var 的符号链接。如果您尝试在这些目录中创建文件,您将能够创建大小为 (1024 - len(/private)) 的路径,即 1016
    【解决方案4】:

    将此命令复制并粘贴到 MacOSX 的终端应用程序(或 iTerm2、xterm 等)中

    bash$ cc -dM -E -xc - &lt;&lt;&lt; '#include &lt;sys/syslimits.h&gt;' | grep -i ' [NP]A.._MAX'

    按⟨return⟩或⟨enter⟩键运行并得到结果:

    #define NAME_MAX 255
    #define PATH_MAX 1024
    

    name 和 path 的最大长度为 在系统头文件sys/syslimits.h中定义 cc(C 编译器)从某个默认位置读取 例如 /usr/include/ 或 Xcode 应用程序中的某个位置。 神秘的开关记录在man cc 但是 本质上,这个例子编译了一个单行程序,并且 将所有“宏”定义打印到grep 的管道中 这应该过滤掉除我们想要看到的行之外的所有行。关注man grep 了解有关使用正则表达式进行模式匹配的详细信息。同样,

    bash$ cc -dM -E -xc - &lt;&lt;&lt; ''

    编译一个空程序并打印出这个特定系统和编译器特有的所有标准“宏”定义——绝对值得一看。

    【讨论】:

    • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of how 和 why 这解决了问题。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
    • bash$ (cd /tmp &amp;&amp; cc -xc - &amp;&amp; (./a.out; echo \$? = $?)) &lt;&lt;&lt; 'int main(){return sizeof (long);}' 打印 long 整数中的字节数。
    猜你喜欢
    • 1970-01-01
    • 2011-10-11
    • 2015-06-10
    • 2011-12-29
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多