【问题标题】:How do I use **environ from unistd.h to search for the right path?如何使用 unistd.h 中的 **environ 搜索正确的路径?
【发布时间】:2013-02-19 08:20:20
【问题描述】:

您好,我正在尝试将execvp()**environ 变量结合使用来为用户输入的命令找到正确的路径。

问题是我真的不明白如何做到这一点。我知道我可以尝试打开命令文件以检查它们是否存在,但我不明白如何从 **environ 获取我需要搜索的路径。

【问题讨论】:

  • **environ 来自哪里?我知道如何做到这一点的唯一方法是使用getenv("PATH"),它只返回一个字符串,这是一个通常以冒号分隔的路径变量列表。你可以使用strtok 来解析这个。
  • 查看此答案:stackoverflow.com/questions/3127614/global-variable-for-getenv 您需要翻阅字符串数组并搜索 PATH 变量。找到 PATH 字符串后,您可以解析字符串中包含的路径。

标签: c++ linux path


【解决方案1】:

人 execvp:

execvp() 将复制 shell在寻找可执行文件时

因此,您不必使用 **environ 变量来找到命令的正确路径execvp() 帮你搞定。

【讨论】:

    【解决方案2】:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
        char *start, *end;
        char ch;
        char* path = getenv("PATH");
    
        if (!path) {
            fprintf(stderr, "could not get $PATH, exiting\n");
            exit(EXIT_FAILURE);
        }
    
        start = path;
        do {
            end = strchr(start, ':');
            if (!end) {
                printf("%s\n", start);
            } else {
                ch = *end;
                *end = '\0';
                printf("%s\n", start);
                *end = ch;
            }
            start = end + 1;
        } while (end != NULL);
    
        return 0;
    }
    

    这个小程序演示了如何从 env[PATH] 中获取单独的路径。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2013-07-14
      • 2012-04-05
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2012-03-27
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多