你好我想结合使用execvp()
与**environ
变量找到用户将在一个命令正确的道路。如何使用unistd.h中的environ来搜索正确的路径?
问题是,我真的不明白如何做到这一点。我知道我可以尝试打开命令文件来检查它们是否存在,但我不明白如何从**environ
中获取我需要搜索的路径。
你好我想结合使用execvp()
与**environ
变量找到用户将在一个命令正确的道路。如何使用unistd.h中的environ来搜索正确的路径?
问题是,我真的不明白如何做到这一点。我知道我可以尝试打开命令文件来检查它们是否存在,但我不明白如何从**environ
中获取我需要搜索的路径。
#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]中获取单独的路径。
人execvp:
execvp()将复制 壳的行动寻找一个可执行文件
因此,你不必使用的** ENVIRON变量以找到命令的正确路径; execvp()
是为你做的。
** environ'从哪里来?我知道如何做到这一点的唯一方法是使用'getenv(“PATH”)'',它只返回一个字符串,这是一个通常以冒号分隔的路径变量列表。你可以用'strtok'来解析这个。 – 2013-03-05 03:35:07
请参阅此答案:http://stackoverflow.com/questions/3127614/global-variable-for-getenv您需要翻阅字符串数组并搜索PATH变量。一旦找到PATH字符串,您可以分析字符串中包含的路径。 – Duck 2013-03-05 03:47:32