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;
}
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