shellexecute pour linux

shellexecute pour linux - C++ - Programmation

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
Reply

Marsh Posté le 11-08-2006 à 09:44:07   

Reply

Marsh Posté le 11-08-2006 à 09:52:36    

system() [:dawak]

Reply

Marsh Posté le 11-08-2006 à 09:53:49    

sais tu l'utiliser ??

Reply

Marsh Posté le 11-08-2006 à 09:56:42    

Oui. [:klem3i1]

Reply

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 ..

Reply

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 ??

Message cité 1 fois
Message édité par d'jo le 11-08-2006 à 10:08:21
Reply

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 :
  1. system( "xterm -e taCommande" );


---------------
TriScale innov
Reply

Marsh Posté le 11-08-2006 à 10:11:17    

super merci beaucoup

Reply

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 ??

Message cité 1 fois
Message édité par d'jo le 11-08-2006 à 10:32:47
Reply

Marsh Posté le 11-08-2006 à 10:51:31    

d'jo a écrit :

Bon encore un bogue..
 
system("xterm -e cd jo/test/" );
 
marche po ..apparement il aime pas cd... une idée ??


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 ?


---------------
TriScale innov
Reply

Marsh Posté le 11-08-2006 à 10:51:31   

Reply

Marsh Posté le 11-08-2006 à 11:00:33    

franceso a écrit :


Que veux tu faire exactement ? Quelle est la commande que tu veux exécuter ?


 
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 :
  1. char Data_Path[50];
  2. sprintf(prog,"%stest.exe",Data_Path);
  3. system(prog);


 
Voila l'idée j'ai deja fait toute la partie interface derriere.

Reply

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 :
 

Code :
  1. char Data_Path[50];
  2. sprintf(prog,"%stest.exe",Data_Path);
  3. system(prog);


 
Voila l'idée j'ai deja fait toute la partie interface derriere.


 
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...


Message édité par youx21 le 11-08-2006 à 11:09:30
Reply

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

Reply

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)
ca ca ne marche pas..


 
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" )


---------------
TriScale innov
Reply

Marsh Posté le 11-08-2006 à 11:58:43    

Ok merci

Reply

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  [:cosmoschtroumpf]


---------------
Putain j'ai rêvé de toi cette nuit !! Alors que jte connais même pas !!-LaL0utre | Ben_be est un roxxeur d'ours d'envergure mondiale-Daaadou |Entre un dessert et Ben_be je choisis Ben_be-Ramasse-miette
Reply

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):

/home/jo/./test


Chez moi, ca marche  [:cosmoschtroumpf]


 
[:doc petrus]
 
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. [:dawa]
 
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
drwxrwxrwt  7 user group      2048 Aug 22 19:18 .
drwxr-xr-x  7 user group      3072 Aug 22 16:05 ..
-rwxrwxr-x  1 user group      6172 Aug 22 15:41 remi
$ echo $PATH
/bin:/usr/bin:/usr/local/bin
$ remi
remi: command not found
$ export PATH=$PATH:.
$ echo $PATH
/bin:/usr/bin:/usr/local/bin:.
$ remi
Bonjour, je m'appelle Rémi et je suis sans famille.
$  


 
[:klem3i1]
 
 
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.


Message édité par Elmoricq le 23-08-2006 à 15:51:18
Reply

Marsh Posté le 23-08-2006 à 15:56:52    

Ha ben merci :jap:,
J'ai appris un truc là (apprendre ca après presque 2 ans sous linux, c'est un peu la honte, mais bon  [:iorili]  )  
Le coup de devoir exécuter un truc dans le répertoire conrrant, j'avais déjà eu le problème en plus, merci  :jap:


---------------
Putain j'ai rêvé de toi cette nuit !! Alors que jte connais même pas !!-LaL0utre | Ben_be est un roxxeur d'ours d'envergure mondiale-Daaadou |Entre un dessert et Ben_be je choisis Ben_be-Ramasse-miette
Reply

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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed