2013-03-05 55 views
0

你好我想结合使用execvp()**environ变量找到用户将在一个命令正确的道路。如何使用unistd.h中的environ来搜索正确的路径?

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

+0

** environ'从哪里来?我知道如何做到这一点的唯一方法是使用'getenv(“PATH”)'',它只返回一个字符串,这是一个通常以冒号分隔的路径变量列表。你可以用'strtok'来解析这个。 – 2013-03-05 03:35:07

+0

请参阅此答案:http://stackoverflow.com/questions/3127614/global-variable-for-getenv您需要翻阅字符串数组并搜索PATH变量。一旦找到PATH字符串,您可以分析字符串中包含的路径。 – Duck 2013-03-05 03:47:32

回答

0
#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]中获取单独的路径。

0

人execvp:

execvp()将复制 壳的行动寻找一个可执行文件

因此,你不必使用的** ENVIRON变量以找到命令的正确路径; execvp()是为你做的。