到目前爲止,我的代碼在用戶輸入時處理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