linux - mkdir "max name length"与 pathconf MAX_PATH & MAX_NAME

标签 linux path mkdir pathconf

我想知道是否有办法知道 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:从命令行删除用户名。

最佳答案

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

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

关于linux - mkdir "max name length"与 pathconf MAX_PATH & MAX_NAME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991083/

相关文章:

c - pcap_open_live 无法打开 eth0 hexinject

c - SIGXFSZ 运行时错误

xml - 从 CLOB 中的 XML,到带有路径列表的 Oracle 表

shell - sudo shell 脚本 mkdir

linux - 如何将 AWS CLI 升级到最新版本?

ios - Xcode 中的永久文件目录

javascript - Fabric .js : How to fill a free hand path to draw the shape?

android - 当父目录可写时,mkdirs 为 sd 卡上的目录返回 false

php - Laravel 5: mkdir/Filesystem::makeDirectory 具有配置权限

php - 引用的列名必须是目标实体类上的主键列