Bonjour,
Je cherche à rédiger un programme qui imprime son PID, puis se lance lui-même au moyen d'une fonction "exec" (execl(), execlp(), execv(), execvp(), ...)
Quelqu'un pourrait-il m'aider à résoudre ce problème?
Merci par avance. 8)
Version imprimable
Bonjour,
Je cherche à rédiger un programme qui imprime son PID, puis se lance lui-même au moyen d'une fonction "exec" (execl(), execlp(), execv(), execvp(), ...)
Quelqu'un pourrait-il m'aider à résoudre ce problème?
Merci par avance. 8)
Comme ça, là, non.
Sur quoi bloques-tu précisement ?
Bah en fait, j'ai essayé de le faire, mais j'ai quelques petites erreurs lors de l'execution de mon programme...
Deux erreurs reviennent:
- bad address
- permission denied
Je pense que ça vient de ma façon d'utiliser execl, qui ne doit pas être très bonne... :oops:
Merci et à bientôt! 8)
Si on avait le code ca serait bien quand meme
Désolé, j'ai pas été vif... Voici le code:
Merci et à bientôt!Code:
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 /* Nom du fichier source: autoExec.c */ #include <stdio.h> #include <sys/types.h> #include <unistd.h> #define NB_EXEC 5 int main(int argc, char *argv[]) { int nbExecRest; pid_t pid; if(argc==1) { nbExecRest=NB_EXEC; } else { nbExecRest=atoi(argv[1]); } printf("le PID de ce processus est %d et il reste %d executions de ce programme", getpid(), nbExecRest); if(nbExecRest != 0) { nbExecRest--; execlp("./autoExec", "./autoExec", nbExecRest, NULL); perror("execlp"); } printf("fin de l execution"); return 0; }
les arguments de execl sont des char *, donc tu dois convertir nbExecRest en char * . Pour convertir :
ensuite met fflush(stdout) apres le printf pour etre sur de voir tes messages.Code:
1
2
3 char s[40]; sprintf(s, "%d", nbExecRest);
enfin execlp recherche l'executable dans le PATH, pour le repertoire courant, execl("autoExec",...) suffit.
là ça devrait macher...
aussii, atoi() à besoin de stdlib.h
Ce qui se fait en generale c'est un fichier de script (.bat sous win et en Bash sous Linux) ! apres suffit de dire au système de lancer ce script au démarrage du gestionnaire de fenetre pis c'est bon, pas besoin d'un programme executable