2013-05-13 3 views
1
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <time.h> 
#include <string.h> 

void getCommand(char* cmd, char** arg_list) 
{ 
pid_t child_pid; 

child_pid = fork(); 

if (child_pid == 0) 
{ 
    execvp (cmd, arg_list); 
    fprintf(stderr, "error"); 
    abort(); 
} 

} 

int main(void) 
{ 

printf("Type the command\n"); 

char *arg_list[] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL}; 

char cmd[20]; 
char delim[2] = " "; 
char *token; 

scanf("%[^\n]", cmd); 

token = strtok(cmd, delim); 

while (token != NULL) 
{ 
    arg_list[0] = token; 
    token = strtok(NULL, cmd); 
} 

getCommand (arg_list[0], arg_list); 
return 0; 
} 

Что я пытаюсь достичь здесь, я хочу прочитать пользовательский ввод, который должен быть командой linux, а затем выполнить команду. Кажется, что я не могу использовать strtok для разделения строки. Я немного потерян, спасибо за помощь.Пользовательский ввод в команду linux в C

+1

paddy получил вашу основную проблему. Вы должны привыкнуть проверять errno. Печать «ошибка» не собирается вам много рассказывать. Также вы можете захотеть родительский 'wait' на дочернем элементе. – Duck

ответ

1

Ваши последующие звонки strtok являются неправильными. Вам нужно передать разделители. Кроме того, вы пишете только первый элемент вашего массива. Попробуйте следующее:

int n = 0; 
while (token != NULL && n < 7) 
{ 
    arg_list[n++] = token; 
    token = strtok(NULL, delim); 
} 
+0

Большое вам спасибо, я определенно использовал strtok неправильно. – Sibanak

Смежные вопросы