shellexecute pour linux - C++ - Programmation
Marsh Posté le 11-08-2006 à 10:04:21
lol . Peux tu rapidement m'expilquer je ne comprend pas je fais :
int main()
{
system("./main " );
return 0;
}
ou avec le nom complet du chemin , il execute le programme mais
ne lance pas l'autre ..
Marsh Posté le 11-08-2006 à 10:08:05
C'est bon trouvé merci. Maintenant plus compliqué sais tu le faire executer sous un autre terminal ??
Marsh Posté le 11-08-2006 à 10:10:42
d'jo a écrit : C'est bon trouvé merci. Maintenant plus compliqué sais tu le faire executer sous un autre terminal ?? |
Tu peux lancer l'exécution dans un nouveau terminal, par exemple comme ça :
Code :
|
Marsh Posté le 11-08-2006 à 10:32:12
Bon encore un bogue..
system("xterm -e cd jo/test/" );
marche po ..apparement il aime pas cd... une idée ??
Marsh Posté le 11-08-2006 à 10:51:31
d'jo a écrit : Bon encore un bogue.. |
Une chose utile à savoir : lorsque tu fais "xterm -e uneCommande", un nouvel xterm se lance, exécute la commande passée en argument (plutôt que de lancer un shell comme d'habitude) et se termine dès que la commande se termine. Du coup, "xterm -e cd ..." n'a pas un intéret fou.
Par ailleurs, cd n'est de toutes façons pas un exécutable. Il s'agit juste d'une commande que ton shell interprête pour changer le répertoire courant. Lancer un cd comme ça en dehors d'un shell n'a pas de sens.
Que veux tu faire exactement ? Quelle est la commande que tu veux exécuter ?
Marsh Posté le 11-08-2006 à 11:00:33
franceso a écrit : |
En fait le but est d'executer un autre programme qui ne sera pas forcement dans le répertoire courant justement d'ou le cd..En fait j'associerai system() à un sprintf avant pour que l'utilisateur choisisse le repertoire du style :
Code :
|
Voila l'idée j'ai deja fait toute la partie interface derriere.
Marsh Posté le 11-08-2006 à 11:07:13
d'jo a écrit : En fait le but est d'executer un autre programme qui ne sera pas forcement dans le répertoire courant justement d'ou le cd..En fait j'associerai system() à un sprintf avant pour que l'utilisateur choisisse le repertoire du style :
|
personnellemnt j'utilise souvant cette possibilité, mais je spécifie toujours mes chemins en absolue pour savoir où je suis. Tout cela rendu possible, bien sur, avec quelques fichiers de configuration, et il n'y a pas trop de problème. Par contre ne pas oublier de traiter les flux de données en sortie de ton programme, et à gerer les éventuelles erreurs. ça en fait du code mine de rien...
Marsh Posté le 11-08-2006 à 11:23:59
j'utilise aussi les chemins en absolu mais en fait le probleme c'est de l'executer dans une autre fenetre: system(xterm -e prog)
ca ca ne marche pas..
merc en tous cas et bon appetit
Marsh Posté le 11-08-2006 à 11:40:05
d'jo a écrit : j'utilise aussi les chemins en absolu mais en fait le probleme c'est de l'executer dans une autre fenetre: system(xterm -e prog) |
Ce que tu veux, c'est exécuter un programme qui n'est pas dans le répertoire courant (auquel cas il suffit de fournir le chemin complet), ou bien lancer depuis un autre répertoire l'exécution d'un programme ?
Dans le deuxième cas, une solution simple consiste à faire un petit shell script qui te cd dans le bon répertoire (par exemple il récupère le nom du répertoire en ligne de commande) et qui appelle le programme que tu veux. Tu peux appeler ce script depuis ton prog C++ avec un system("xterm -e script repertoire" )
Marsh Posté le 23-08-2006 à 15:15:20
Si le nom du programme est test dans /home/jo, il faut taper ca dans un terminal pour le lancer de n'importe ou (si j'ai bien compris la question):
/home/jo/./test |
Chez moi, ca marche
Marsh Posté le 23-08-2006 à 15:49:28
Ben_be a écrit : Si le nom du programme est test dans /home/jo, il faut taper ca dans un terminal pour le lancer de n'importe ou (si j'ai bien compris la question):
|
Aucune différence entre "/home/jo/test" et "/home/jo/./test".
Parce que "." signifie, sur unixoïde, le répertoire courant.
Si ça t'amuse, tu peux même marquer : "/home/./././././jo/./././././././././test", et ça fonctionne aussi.
Ce qui est dit ici c'est que, souvent, le répertoire courant ne figure pas dans la liste des répertoires contenant des binaires exécutables de n'importe où. Cette liste de répertoire est stockée dans la variable d'environnement $PATH, et c'est justement en ajoutant "." dans cette variable d'environnement que l'on indique au shell que le répertoire courant peut également contenir des binaires susceptibles d'être exécutés.
Ainsi (exemple bidon en ksh) :
$ ls |
A noter que si c'est valable pour ".", c'est du coup valable pour n'importe quel répertoire. Si tu veux que les binaires de /home/jo soient exécutables de n'importe où, il suffit d'ajouter ce répertoire à $PATH.
Marsh Posté le 23-08-2006 à 15:56:52
Ha ben merci ,
J'ai appris un truc là (apprendre ca après presque 2 ans sous linux, c'est un peu la honte, mais bon )
Le coup de devoir exécuter un truc dans le répertoire conrrant, j'avais déjà eu le problème en plus, merci
Marsh Posté le 30-08-2006 à 22:30:18
y a aussi les appels systèmes de la famille exec (man 3 exec < pour la doc)
Marsh Posté le 11-08-2006 à 09:44:07
Bonjour,
Je n'arrive pas à trouver l'équivalent de shellexecute pour linux.Il ya bien la fonction system() mais elle ne fonctionne pas si je veux executer \home\test\test par exemple...
Si quelqu'un peut m'aider
merci
Message édité par d'jo le 11-08-2006 à 09:53:24