Bonsoir, je bute encore sur l'appel de commande externe.
Comment exécutez vous vos commandes externes avec Ada ?
J'essaye avec un import de system ou un binding de system mais ça fonctionne pas bien.
S'il vous plaît, merci.
Bonsoir, je bute encore sur l'appel de commande externe.
Comment exécutez vous vos commandes externes avec Ada ?
J'essaye avec un import de system ou un binding de system mais ça fonctionne pas bien.
S'il vous plaît, merci.
Peux-tu préciser ce que tu as fait ?J'essaye avec un import de system ou un binding de system mais ça fonctionne pas bien.
j'ai écrit un petit bout de code C dans le quel je fais un appel de ma commande grâce à la fonction 'system'.
puis j'importe la fonction matrix.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int matrix (void) { int status = 0; status = system("cmatrix -abC blue"); return status; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 function The_Matrix return C.Int; pragma Import (C, The_matrix, "matrix");
Et quel est le résultat ?
Pourquoi pas une importation du genre :
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 function system (cmd : in string) return integer; pragma import (C, system, "system");
Un exemple qui marche chez moi :
Code ada : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 with Ada.Text_Io ; use Ada.text_Io ; procedure Test is function system (cmd : in string) return integer; pragma import (C, system, "system"); Res : Integer ; begin Res := System( "echo coucou" ) ; end;
Parfois ça marche, parfois ça marche pas.
Mais je pense que ça viens de la commande que je lance.
C'est ce que j'écrivais au début, puis je me suis dit que c'est mieux en utilisant interfaces.C.
Oui, je pense que ça fonctionnerait aussi chez moi.
Je pense 2 chose, d'une, "cmatrix" est une commande lourde, et je lance une tache avec un get_immediate ou un get_line juste avant mon appel à system.
Normalement cmatrix prend un caractère pour sortir, et là je doit tantôt en entrer deux, alors que parfois il n'en suffis qu'un.
C'est pour dire que parfois ça marche, parfois ça marche pas.
A mon avis, le problème ne réside sans doute pas dans System.
Il n'y a surtout pas d'intérêt à faire un appel à une fonction qui fait appel à une autre (surtout que tu connais la ligne à exécuter).C'est ce que j'écrivais au début, puis je me suis dit que c'est mieux en utilisant interfaces.C.
Crois en mon expérience de debuggage de code C et SSE, moins tu as de code plus c'est facile d'identifier les problèmes. En ada c'est le même principe si tu peux faire le travail en une fonction, c'est mieux que de le faire avec deux.C'est une autre histoire si je puis me permettre
Ce sont deux fonctions de GNAT, qui permettent de manière plus ou moins complète (en terme de fonctionnalité) pour lancer des programmes externes (c'est un peu ce que tu veux faire, hien ? )A quoi servent les fonctions Spawn et la dernière Get_Command_Output.
Spawn :
http://www.radford.edu/~nokie/classe...at-os_lib.html
Get_Command_Ouput
http://www.doc.ic.ac.uk/~awl03/cgi-b...a/g-expect.ads
Et bien justement, je préfèrerais utiliser des fonction Ada, plutôt que ce faire un import de la fonction système... j'ai testé les spawn et get_command_output mais sans succès... Donc, je cherche, c'est un peu l'objet du sujet effectivement.
Spawn et Get_Command_Output ne sont pas des fonctions ada mais GNAT (donc tout sauf portable). L'import de la fonction système se fait via une directive standard d'ada et importe une fonction standard du C (C90), c'est donc la solution la plus standard et portable.j'ai testé les spawn et get_command_output mais sans succès... Donc, je cherche, c'est un peu l'objet du sujet effectivement.
Très juste, bien vu.
N'y a-t-il pas de moyen avec Ada ?
Bonsoir,
J'ai réécrit une fonction system(commad : string) return integer;
Pour faire un pragma import (C, system, "system");
Et j'appelle s'implement system("cls");
J'ai un message de la part de Windows qui me dis "clsstophalt" n'est pas une commande interne.
Une idée s'il vous plait ?
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