我想检查路径是否是另一条路径的子路径,因此我调用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)
。
但这不是一个很好的解决方案,因为我创建了目录而且我不知道如果结果不是路径的孩子会怎么做。只需删除所有创建的目录?
答案 0 :(得分:1)
我说" 访问被拒绝" (EACCES
)并不表示缺少文件(ENOENT
),但对路径或部分路径的访问权限不足。
来自man realpath:
<强>错误强>
EACCES 对路径前缀的组件拒绝了读取或搜索权限。
[...]
ENOENT 指定的文件不存在。
回答你的问题:
在Linux / Unix / C中是否有一个等效的实际路径,它没有检查文件是否存在?
没有
但这对您的用例来说并不是必需的。只需使用.
代替您要创建的文件名。