到目前为止,我的代码在用户输入时处理ls
命令。我希望能够处理像ls -l /tmp
这样的命令。 我的代码到目前为止。处理命令,如ls -l/somedir
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <stdarg.h>
#include <sys/types.h>
int main(void)
{
for(;;){
char str[500];
printf("Type a command : \n");
scanf("%s",str);
char *path;
path = getenv("PATH");
char *argv[] = { path ,NULL};
int status;
int pid = fork();
if (pid == 0) {
printf("executing==============> %s \n",str);
execvp(str,argv);
}
wait(&status);
}
}
任何想法?我必须这样做,没有system()
。
首先,你应该使用'scanf函数( “%s” 时,STR);'代替。你的代码工作,因为在这种情况下,'str'和'&str'具有相同的地址。 当你调用'execvp'时,你需要传递你想运行的命令和一个字符串数组作为参数,每个字符串都是该命令的一个参数。 P.S .:通常用所需的命令启动阵列。例如'char * argv [] = {str,“-l”,“/ tmp”,NULL};' – ddz
'char * argv [] = {str,“-l”,“/ tmp”,NULL}; '当我输入'ls'时,它直接执行'ls -l/tmp'。我想要的是能够像'ls','pwd' **和'ls -l/somedir' @LuizEduardoF这样的命令来处理命令。 –
请参阅下面的答案。 – ddz