【问题标题】:mkdir "max name length" vs pathconf MAX_PATH & MAX_NAMEmkdir "最大名称长度" vs pathconf MAX_PATH & MAX_NAME
【发布时间】:2016-06-29 16:48:51
【问题描述】:

我想知道是否有办法知道 mkdir 可以创建的目录名的最大大小。我凭经验发现我的版本 8.21 在 Ubuntu 14.04 上的限制是 1024。

$ mkdir $(python -c "print('x' * 1024)")
$ echo $?
0
$ mkdir $(python -c "print('x' * 1025)")
mkdir: cannot create directory ‘... (x repeated 1025 times) ...’: File name too long

根据 pathconf(使用来自 pjd(一个 POSIX 文件系统测试套件)的工具):

$ # pathconf("/", NAME_MAX)
$ ./pjdfstest pathconf / _PC_NAME_MAX 
255
$ # pathconf("/", PATH_MAX)
$ ./pjdfstest pathconf / _PC_PATH_MAX 
4096

知道为什么这些值不同吗?

编辑 1:从命令行中删除用户名。

【问题讨论】:

  • 我目前正在使用的文件系统为 NAME_MAX 返回 0,所以 pjd 就这样 :boom:.

标签: linux path mkdir pathconf


【解决方案1】:

Ubuntu 14.04 附带 coreutils 8.21,其 mkdir 实用程序对目录名称的长度没有限制。实际上,传递给execve 的参数列表的长度(通常为几兆字节)以及路径的PATH_MAXNAME_MAX 配置值的值是有限制的。

在 Linux 上,glibc 的 pathconf 函数通过在给定路径上调用 statfs 并在返回的结构中使用 fr_namelen 值来确定 NAME_MAX。因此,/ 可能有一个值,如果您的 pjdfstest 目录位于不同的文件系统中,则可能有另一个值。在评论中,您说文件系统为 NAME_MAX 返回 0,所以看起来它没有完全实现用户空间代码所期望的接口。您可能需要查看文件系统的源代码以了解它是如何实现文件名和路径名限制的。

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 2014-07-23
    • 2015-11-24
    • 2017-05-25
    • 2023-01-13
    • 2011-08-19
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多