如何在没有目录迭代的情况下在Linux上获取区分大小写的路径?

Mic*_*cer 5 c linux posix cifs path

给定一个/network/cifs不区分大小写的已安装的cifs文件系统,如何使用C获取区分大小写的路径?

例如,fs有一个文件/network/cfis/Adena/t.txt.鉴于/network/cfis/AdEnA/T.txt(正确解决),我想要/network/cfis/Adena/t.txt.

我知道一种方法是在路径上递归迭代,在所有小写中匹配它们,并获得目录迭代返回的实际情况.但是,这涉及很多我不愿意做的系统调用.

更改安装选项不是解决方案.

如果这不可能,是否可以确定路径是否在不区分大小写的文件系统上?这样我就可以避免执行递归目录迭代,除非需要.

jør*_*sen 3

这个问题昨晚刚刚在 IRC 中出现;我的答案是你必须迭代,原因是getcwd(这可以通过仅查看/proc/N/Linux 中的文件来实现)无法可靠地确定规范名称。Linux CIFS 内核模块将使用您要求的大小写来动态伪造 inode:

ls -dli /mnt/foo /mnt/foO /mnt/fOo /mnt/FOo /mnt/FOO
Run Code Online (Sandbox Code Playgroud)

可以显示非常不同的值,因此,/proc/self/cwd将反映这些索引节点之一,不一定是具有规范命名的索引节点。