【发布时间】:2015-06-02 13:50:33
【问题描述】:
我想检查一个路径是否是另一个路径的子路径,所以我调用realpath(file_path, NULL) 并将结果与strncmp 进行比较。
我写这个主题的原因是:realpath 将errno 设置为拒绝访问。如果此路径的一部分是某个目录的子路径,我想创建一个文件,因此在调用 realpath 之前该文件不能存在。
在 Linux/Unix/C 中是否有 realpath 等效项,它不检查文件是否存在?它也不能跟随符号链接。
假设我有目录“/tmp/tao-client-aaaaaa/classes/”,我只想创建(一个文件)“/tmp/tao-client-aaaaaa/classes/parent/parent generating test”,因为应用程序(服务器)要求创建“/parent/parent generating test”。问题是我无法创建名为“parent”的目录,因为它可能是“..”,realpath 将返回错误,而我测试文件,该文件将在不存在的目录中创建。
我想,我可以自己实现realpath,但我听说Unicode有很多字符或字符连接意味着父目录。
我有想法。我可以创建添加到路径下一个目录的函数,使用realpath 和realpath 的测试结果是参数的子目录(称为路径)。接下来,如果条件不通过,则返回 null;如果条件通过,则返回 realpath 结果。 Wrapper 将创建该目录并从路径获取下一个目录以保存文件并以这种方式将其传递给此函数result_path = test_real_path(result_path, next_directory)。
但这不是很好的解决方案,因为我创建了目录并且我不知道如果结果不是路径的子节点该怎么办。只删除所有创建的目录?
【问题讨论】:
-
你能澄清你的最后一句话吗?您的意思是“它不必清理路径中的符号链接”吗?我认为如果你举一个你正在尝试做的例子会很有帮助。
-
我不希望函数/过程因安全问题而遵循符号链接,但这不是我的程序运行所必需的。它不应从文件系统中删除符号链接,但应在找到符号链接后生成错误。
-
没有标准函数会在遇到符号链接时出错。我有类似于
realpath()的代码,它检查所有符号链接和符号链接中组件的安全性——它可以适应在遇到符号链接时给出错误。但它是一段不平凡的代码,大约有 1000 行代码加上测试材料等。它会检查你可能不需要,也不会做一些你绝对需要它做的事情,但那是因为它在生活中有不同的使命。 -
如果您给出一个包含 2-4 条路径的示例以及在这些示例中使用时希望从函数中获得的结果,它仍然会有所帮助。因为我还不清楚你真正追求的是什么——双重不是因为你说你不想跟随符号链接,但
realpath()的目的是解析符号链接。 -
假设我有目录“/tmp/tao-client-aaaaaa/classes/”,我只想创建“/tmp/tao-client-aaaaaa/classes/parent/parent 生成测试”,因为应用程序(服务器)要求创建“/父/父生成测试”。问题是我无法创建名为“parent”的目录,因为它可能是“..”,而 realpath 将返回错误,而我测试文件,该文件将在不存在的目录中创建。