gpt4 book ai didi

c - Realpath 要求文件存在

转载 作者:太空狗 更新时间:2023-10-29 12:14:52 25 4
gpt4 key购买 nike

我想检查一个路径是否是另一个路径的子路径,所以我调用 realpath(file_path, NULL) 并将结果与​​ strncmp 进行比较。

我写这个主题的原因是:realpath 设置errno 来拒绝访问。如果此路径的一部分是某个目录的子路径,我想创建一个文件,因此在调用 realpath 之前该文件不存在。

在 Linux/Unix/C 中是否有等效的 realpath,它不检查文件是否存在?它也可以不跟随符号链接(symbolic link)。


Material from comment :

假设我有目录“/tmp/tao-client-aaaaaa/classes/”,我只想创建(一个文件)“/tmp/tao-client-aaaaaa/classes/parent/parent generating test”,因为应用程序(服务器)要求创建“/parent/parent generating test”。问题是我无法创建名为“parent”的目录,因为它可能是“..”并且 realpath 将返回错误,而我测试文件,它将在不存在的目录中创建。

我认为,我可以自己实现 realpath,但我听说 Unicode 有很多字符或字符连接表示父目录。

Material from 'answer' :

我有想法。我可以创建添加到路径下一个目录的函数,使用 realpath 并且 realpath 的测试结果是参数的子目录(称为路径)。接下来,如果条件未通过,则返回 null;如果条件通过,则返回 realpath 结果。 Wrapper 将创建该目录并从路径获取下一个目录以保存文件,并以这种方式将其传递给此函数 result_path = test_real_path(result_path, next_directory)

但这不是很好的解决方案,因为我创建了目录,但我不知道如果结果不是路径的子项该怎么办。只删除所有创建的目录?

最佳答案

我会说“访问被拒绝”(EACCES)并不表示文件丢失(ENOENT)但访问权限不足路径或其一部分。

来自 man realpath :

ERRORS

EACCES Read or search permission was denied for a component of the path prefix.

[...]

ENOENT The named file does not exist.


然后回答你的问题:

Is there a realpath equivalent in Linux/Unix/C, which doesn't check that the file exists?

没有。

但这对于您的用例来说不是必需的。只需使用 . 而不是您要创建的文件名。

关于c - Realpath 要求文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com