gpt4 book ai didi

c - 解析和 evecvp 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:04 25 4
gpt4 key购买 nike

我正在尝试编写一个 C 程序,该程序读取 Lunix 命令作为字符串,将字符串解析为 char*[],然后使用 evecvp 执行命令。

这是我的代码:

解析字符串

        char *args[40];
char command[80];
fgets (command, MAX_LINE, stdin);
int counter = 0;
token = strtok(command," ");
args[0] = token;



//printf("%s\n",args[0]);

while(should_run == 1){
token = strtok(NULL," ");
if (token == NULL){
break;
}
counter++;
args[counter] = token;
printf("%s\n",token);
}
args[counter+1] = NULL;
executeCommands(args, counter, -1);

执行命令

void executeCommands(char *args[], int counter, int histCounter){
/*int j;
for (j = 0; j <= counter; j++){
printf("%s",args[j]);
}*/
printf("\n");
pid_t pid;
pid = fork();
if (pid == 0){
execvp(args[0], args);
printf("exec failed: %s\n", strerror(errno));
}
else{
if(counter == -1 && histCounter == 1){
wait(NULL);
}
else if(*args[counter] == '&'){
wait(NULL);
}
}

当我给出诸如“ls”或“pwd”之类的简单输入时,它会输出“exec failed: No such file or directory”。唯一稍微起作用的命令是“pwd &”,它输出“忽略非选项参数”,后跟正确的当前路径。

最佳答案

一个问题是您输入的换行符停留在字符串的末尾,例如您正在将 ls\n 传递给 execvp() 而不是 ls。在调用 executeCommands() 之前尝试这样的事情:

char *a = args[counter];
a[strlen(a) - 1] = '\0';
args[counter+1] = NULL;
executeCommands(args, counter, -1);

关于c - 解析和 evecvp 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22465075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com