我希望检查一个路径是否是另一个路径的子路径,所以我调用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有很多字符或字符连接,意思是父目录。
我有个主意。我可以创建添加到path下一个目录的函数,使用realpath,realpath的测试结果是参数的子目录(称为路径)。接下来,如果条件不传递,则返回null,如果条件传递,则返回realpath结果。包装器将创建该目录,并从path获取下一个目录,以保存文件,并以这种方式将其传递给result_path = test_real_path(result_path, next_directory)函数。
但这不是很好的解决方案,因为我创建目录,我不知道如果结果不会是路径的子级怎么办。只需删除所有创建的目录?
发布于 2015-03-29 15:50:38
我认为“拒绝访问”(EACCES)并不表示缺少文件(ENOENT),但对路径或其部分的访问权限不足。
来自人的真实路径
误差 拒绝对路径前缀的组件进行EACCES读取或搜索权限。 ..。 ENOENT命名文件不存在。
回答你的问题:
Linux/Unix/C中是否存在等效的realpath,它不检查文件是否存在?
不是的。
但这对于用例来说并不是必要的。只需使用.,而不是要创建的文件名。
https://stackoverflow.com/questions/29331103
复制相似问题