所以我正在开展一个小项目,我有这个功能:
void call_execve(char *cmd)
{
int i;
char bin[5];
char full_cmd[100];
strcpy(bin, "/bin/");
strcat(full_cmd, bin);
strcat(full_cmd, cmd);
if(fork() == 0) {
i = execve(full_cmd, my_argv, my_envp);
if(i < 0) {
printf("%s: %s\n", full_cmd, "command not found");
exit(1);
}
} else {
wait(NULL);
}
}
我想我的大脑今晚没想到,我需要让它检查/ usr / bin目录下的程序或shell命令。
我知道我可以使用$ PATH变量,但我不确定如何通过C语言使用它。如果您可以将此函数重写为从/ usr / bin目录执行程序或使用$ PATH执行程序
,那就太棒了提前谢谢。
盖斯特。
答案 0 :(得分:1)
来自exec(3)
手册页:
execlp()
,execvp()
和execvpe()
函数会复制操作 如果指定的文件 - 搜索可执行文件的shell name不包含斜杠(/)字符。该文件是在寻求 以PATH
环境变量中指定的以冒号分隔的目录路径名列表。
答案 1 :(得分:0)
execvp库函数模仿$PATH
中的shell搜索,然后调用execve
。
如果您想要执行一个文件路径为您所知的程序(例如/usr/bin/mail
),那么只需使用完整路径作为第一个文件名execve >论证。