如何检查路径是否在c中的目录之外?

部分

我正在尝试检查路径是否比当前目录指向“上”。范例:

我在里面 "./"

假设当前目录包含一个名为“文件夹”的文件夹

我想检查是否cd "./folder/../../"会将我引到“ ./”之外。在这种情况下,它将回答我是对的。

这是将我的程序绑定到其执行文件夹(我希望它执行ls,但绝不在外部)。

约翰·库格曼

POSIX.1-2001定义了realpath(3)

#include <limits.h>
#include <stdlib.h>

char *realpath(const char *path, char *resolved_path);

realpath()扩展所有的符号链接,并做出决议参考/.//../并额外'/'由路径命名产生规范化的绝对路径名的空值终止字符串中的字符。生成的路径名以NULL终止的字符串形式存储,最大为PATH_MAX字节,存储在指向的缓冲区中resolved_path结果路径将没有符号链接/.//../组件。

您可以将规范化路径与当前目录进行比较,看看前者是否为后者的后代。

#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool is_inside(const char *parent, const char *child) {
    char *abs_parent = realpath(parent, NULL);
    if (!abs_parent) { perror(parent); exit(EXIT_FAILURE); }

    char *abs_child  = realpath(child,  NULL);
    if (!abs_child)  { perror(child);  exit(EXIT_FAILURE); }

    size_t parent_len = strlen(abs_parent);
    size_t child_len  = strlen(abs_child);

    bool result = strncmp(abs_parent, abs_child, parent_len) == 0 &&
        (child_len == parent_len || abs_child[parent_len] == '/');

    free(abs_parent);
    free(abs_child);

    return result;
}

int main(int argc, char **argv) {
    if (argc != 3) {
        fprintf(stderr, "usage: %s <parent> <child>\n", argv[0]);
        return 1;
    }

    printf("%s\n", is_inside(argv[1], argv[2]) ? "yes" : "no");
    return 0;
}

请注意,这仅在路径存在的情况下有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查C中的目录是否存在

如何检查路径目录是否为空?

递归检查路径中的目录是否存在

如何在php中检查远程路径上是否存在文件夹或目录

如何根据路径java检查目录是否存在

如何检查$ PWD是否为给定路径的子目录

如何检查xpath中的路径是否存在?

如何检查路径是否在PYTHONPATH中?

如何检查python中的路径是否是文件?

如何检查 Python 中是否存在目录?

检查文件是否在C目录中

检查文件夹中是否有任何子目录,并在c#中返回路径

如何通过詹金斯管道脚本检查目录是否存在于工作空间之外

如何检查一个路径是否是另一个路径的子目录?

检查给定的路径是否是golang中另一个路径的子目录

如何检查C#的json对象中是否存在嵌套路径?

如何在C#中检查目录是否是git存储库

检查文件是否存在于路径中的任何目录中或当前目录是否在 git 项目中

如何检查路径是否存在?

如何检查目录是否存在?

如何检查Bash中两个路径是否相等?

如何检查VBA中是否存在相对路径

如何使用Curator检查Zookeeper中是否存在路径?

如何检查清单类路径中是否包含类?

如何检查Scala中是否存在路径或文件

如何检查给定目录在Ruby中是否存在

如何检查目录在Linux中是否存在?

如何检查bash中是否存在文件或文件目录?

如何检查厨师食谱NOT_IF中是否存在目录?