web-dev-qa-db-fra.com

Comment utiliser execvp ()

L'utilisateur lira une ligne et je conserverai le premier mot comme commande pour execvp.

Disons qu'il va taper "cat file.txt" ... la commande sera cat. Mais je ne sais pas comment utiliser cette execvp(), j'ai lu quelques tutoriels mais je ne l'ai toujours pas compris.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *buf;
    char command[32];
    char name[32];
    char *pointer;
    char line[80];
    printf(">");

    while((buf = readline(""))!=NULL){   
        if (strcmp(buf,"exit")==0)
        break;

        if(buf[0]!=NULL)
        add_history(buf);

        pointer = strtok(buf, " ");
        if(pointer != NULL){
            strcpy(command, pointer);
        }

        pid_t pid;

        int  status;

        if ((pid = fork()) < 0) {     
            printf("*** ERROR: forking child process failed\n");
            exit(1);
        }
        else if (pid == 0) {          
            if (execvp(command, buf) < 0) {     
                printf("*** ERROR: exec failed\n");
                exit(1);
            }
        }
        else                                  
        while (wait(&status) != pid)       
            ;
        free(buf);
        printf(">");
    }///end While
    return 0;
}
12
Axl

Le premier argument est le fichier que vous souhaitez exécuter et le second argument est un tableau de chaînes terminées par des caractères Null qui représentent les arguments appropriés du fichier comme spécifié dans la page de manuel .

Par exemple:

char *cmd = "ls";
char *argv[3];
argv[0] = "ls";
argv[1] = "-la";
argv[2] = NULL;

execvp(cmd, argv); //This will run "ls -la" as if it were a command
31
Ricky Mutschlechner