Lancement d'un programme par un autre programme et lui envoyer des variables

inquisitor87 Messages postés 22 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 22 mars 2007 - 17 déc. 2004 à 18:12
inquisitor87 Messages postés 22 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 22 mars 2007 - 19 déc. 2004 à 18:23
Bonjour à tous,
Je me permet de vous poser cette question car j'ai longuement cherché mais n'ai point trouvé.
En fait, je suis actuellement en train de créer une interface graphique pour une suite de logiciels scientifiques opensources (en console uniquement), afin d'aider au maximum les chercheurs en leur permettant un gain de temps.

En effet, chaque logiciel de cette suite de logiciels pose plusieurs questions (toujours les mêmes) à chaque exécution, et je souhaiterais pouvoir empêcher tt le monde de retapper 15 ou 20 fois les mêmes choses.

Mon problème est le suivant :

J'ai besoin que mon interface graphique que je travaille en ce moment puisse lancer un autre programme, et lui envoyer en même temps (ou au fur et à mesure ) des variables (comme l'emplacement du fichier à traiter, etc...), mais le programme d'origine n'a pas de argv[], et je ne désire pas modifier les sources originales, afin de rester adaptables aux futurs évolutions de cette suite logicielle.

Si vous pouviez me renseigner, aussi bien dans le cas de Linux que de Windows, je vous en serais fort gré.

Merci d'avance :big)

4 réponses

mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
17 déc. 2004 à 19:45
pour lancer un éxecutable j'utilise la commande fork() combiner avec la commande exec().

si tu connais pas la gestion des processus je t'explique.

tu code ton programme normalement.puis tu copie ton processus a l'identique avec la commande fork(). Puis tu transforme ta copie en ton programme que tu veux lancer avec la commande exec().

ex:

#include // obligatoire pour la gestion des processus

// ton programme normale
if(fork())
{
// nouveau processus
exec("chemin de ton programme a lance",arguments a passer a ton programme // pour toi en faite NULL);

exit(0);

}
else
{
// processus d'origine

// continue ton code (s'execute parrallement avec le nouveau
// processus utile pour des infos concernant ton programme lancé

exit(0);
}

la gestion des processus étant un peu compliqué je te renvoie sur mon cours de l'année dernier sur http://mathinfo.ens.univ-reims.fr/
rubrique licence -> informatique -> systeme -> SE_cours3.pdf

les fonctions marchent sur tout systeme unix , pour windows je ne sais pas les fonctions ont des noms différents.

Sinon il a d'autre moyen comme les Threads au autre mais je connais pas trop le sujet.

comme ton programme n'as pa d'arguments il faudrait savoir comment ton programme récupere tes informations.

si c'est par entrée clavier il faudrait pouvoir controlé le flux d'entré clavier. par des tubes ( voir le même sites ) ou en c++ par un pointeur iostream modifiant directement dans cin (a essayer)

Voili,Voilou ;)
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
17 déc. 2004 à 22:42
Euh, pk pas ShellExecute() ...a chercher sur msdn...c'est très pratique! ++

Gendal67, Dev-C++ 4.9.9.0, J'adore cppfrance!! :-))
0
boumarsel Messages postés 298 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 9 juillet 2008 1
18 déc. 2004 à 01:17
je pense que tu dois mettre
if(!fork())
{// nouveau processus
...
}
au lieu de if(fork())
0
inquisitor87 Messages postés 22 Date d'inscription dimanche 26 septembre 2004 Statut Membre Dernière intervention 22 mars 2007
19 déc. 2004 à 18:23
Merci beaucoup à tous. Je vais essayer ça. Je vous tiendrais au courant ici de l'avancement de mon interface graphique, et je mettrais les sources ici, et sur un site internet pour la communauté scientifique.

Encore une fois merci, vous m'avez bien aidés. ;)
0
Rejoignez-nous