execvp и я; Как я могу заставить его работать на меня?

Я создал оболочку, и она работает, когда я использую system(1), но в спецификациях сказано, что это не так. Я пытаюсь использовать execvp в конце, и я не совсем уверен, как это сделать. Любой шанс помощи будет оценен.

Код ->

char *token = NULL;
char line[LINE_MAX];
char *line2 = NULL;
char *tempraryToken = NULL;
char *command = NULL;
char args[LINE_MAX];    

int numSpaces = 0;
int i;
int strleng = 0;
while( 1 )
{
    if( scanf(" %[^\n]", line) > 0) ) //prune off the newline char 
        token = strtok( line, ";" )   //break up different commands 
                                      //on the same line by ;
        do{
            strleng = strlen(token);
            for( i = 0; i < strleng; i++ )
            {
                if(token[i] == ' ') numSpaces++; //find out if there are spaces
            }
            i = 0;
            if( numSpaces >= 1 ) //if there are spaces
            {
                 line2 = token;
                 temporaryToken = strtok( line2, " ") //break by spaces
                 do{
                     //if it's before any spaces
                     if(i == 0){
                         command = temporaryToken;
                     }
                     else strcat(args, temporaryToken);
                 strtok( NULL, " ");
                 while (temporaryToken != NULL);
            }
        execvp(command, args); //this could be any of the exe commands
                               //that's what I'm looking for
        token = strtok( NULL, ";" ) //move to next token
        while( token != NULL );
}

person Sam P    schedule 08.08.2012    source источник
comment
В чем именно заключается ваш вопрос?   -  person DevSolar    schedule 08.08.2012
comment
Не лучше ли использовать fork() и waitpid до завершения процесса?   -  person stetro    schedule 08.08.2012
comment
Я ужасно формулирую эти вопросы - я ищу правильную команду exe для использования здесь.   -  person Sam P    schedule 08.08.2012


Ответы (1)


По сути, чтобы продолжить работу после execvp, вам нужно fork ваш процесс, запустить execvp в дочернем и wait или waitpid для него в родительском. Имея это в виду, проведите собственное исследование ;-)

person Michael Krelin - hacker    schedule 08.08.2012
comment
Ну да, если нужно пообщаться на его вход и выход. - person Michael Krelin - hacker; 08.08.2012