我正在制作一个小shell来更好地理解C.我使用POSIX getline函数来获取一个字符串,并通过空格将其拆分为令牌。但是,当我调用execvp()来进行系统调用时,没有任何反应。如果有人指向我,我所遇到的问题,显然我错过了一些可能很小的东西......(我没有&#39 ; t包括整个代码,所以底部会丢失一些大括号,只是忽略这个抱歉)非常感谢
char *args[3]; // array for the command and arguments
cmd = strtok(line, " ");
args[0] = cmd; // put the first command in the array
for(int i = 1; i < whitespace+1; ++i){
cmd = strtok('\0', " \n");
args[i] = cmd; // fill the array of strings with the arguments
}
args[2] = '\0'; // assign last element to NULL
pid = fork();
if(pid != 0){
waitpid(-1, &stat, 0);
}
else{
char *const *test[1];
test[0] = '\0';
execvp("/bin/ls", test[0]);
execvp(args[0], &args[1]);
最后是我遇到问题的地方,我分别尝试了两个版本的execvp,但都没有工作,我已经在这个问题上停留了2天..任何帮助表示感谢
答案 0 :(得分:1)
以下是如何使execvp
工作的最小示例。
#include <stdio.h>
#include <unistd.h>
int main( void )
{
char *test[2]; // declare an array of pointers
test[0] = "/bin/ls"; // first arg is the path to the executable
test[1] = NULL; // NULL terminator indicates no additional args
execvp( test[0], test );
}
以下是execvp
按照惯例,第一个参数应指向文件名 与正在执行的文件相关联。指针数组必须 被NULL指针终止。