Bonjour, je dois écrire un programme qui exécute une commande du shell.
Pouvez vous m'aider à réaliser ce programme ?
Merci,
Bonjour, je dois écrire un programme qui exécute une commande du shell.
Pouvez vous m'aider à réaliser ce programme ?
Merci,
Bonjour,
En effet on peut t'aider mais on ne fera pas le travail à ta place.
As-tu déjà essayé de commencer ? Qu'as-tu déjà fait? Où bloques-tu?
Connais-tu fork() et execlp ?
Ok merci j'ai compris comment fonctionnait execlp.
Mon programme fonctionne si je met par exemple directement execlp("ls", "ls", NULL) mais il doit fonctionner pour toutes les commandes passées en argument de la fonction et je ne vois pas comment faire
Je ne l'ai jamais utilisé mais tu peux utiliser les va_lists pour passer un nombre d'argument variable.
Ensuite, pour découper les arguments, soit utiliser un regex, soit parcourir la chaîne "à la main".
Sinon est-ce que system est autorisé ?
D'accord je te remercie, je vais me renseigner sur les va_lists
Non je ne pense pas pour system...
execvp() oblige à faire un tableau de chaines, mais je ne sais plus me servir des listes d'arguments ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> void commande (const char *commande, char * const args[]) { pid_t pidfork = fork(); if( pidfork == 0 ) { // Processus fils printf("Processus fils %d...\n", getpid()); execvp(commande, args); //Ok mais il faut pouvoir passer c qui est la commande "non découpée" } else if( pidfork == -1) { // Erreur puts("Impossible de forker, fin !"); exit(EXIT_FAILURE); } else { // Processus pere printf("Processus pere.... En attente de mon fils %d...\n", pidfork); wait( pidfork ); printf("Processus pere.... Mon fils %d a termine\n", pidfork); } } int main() { char * const mkdir[] = {"mkdir","dossier1", NULL}; char * const ls[] = {"ls","-l", NULL}; char * const rmdir[] = {"rmdir", "dossier1", NULL}; commande(mkdir[0], mkdir); commande(ls[0], ls); printf("\n\n\n"); sleep(1); commande(rmdir[0], rmdir); commande(ls[0], ls); return 0; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager