mkdir“max name length”vs pathconf MAX_PATH& MAX_NAME

时间:2016-03-14 15:05:11

标签: 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 Filesystem测试套件)中的工具):

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

知道价值观不同的原因吗?

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

1 个答案:

答案 0 :(得分:0)

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

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