Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/07/2024, à 15:36

alrito

[Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Bonjour,

Je voudrais créer une fenêtre qui afficherai le résultat d'une commande inscris dans mon programme par exemple :

#include <stdio.h>
#include <stdlib.h>
int main() {
    int i;
    i = system ("echo Bonjour est bienvenu dans cette fenêtre de terminal");
    return 0;
}

Je compile et j'exécute le code et j'obtiens la phrase :

Bonjour est bienvenu dans cette fenêtre de terminal

Maintenant, comment fait-on pour avoir une fenêtre en mode terminal qui afficherai cette phrase sans passer par un logiciel de terminal (konsole, etc...) ?

Dernière modification par alrito (Le 10/07/2024, à 18:38)


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#2 Le 06/07/2024, à 16:02

Watael

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

comment fait-on pour avoir une fenêtre en mode terminal qui afficherai cette phrase sans passer par un logiciel de terminal (konsole, etc...) ?

tu veux faire des frites sans détailler une pomme de terre en bâtonnets, et sans huile !? big_smile

question : pourquoi pas i = 'Bonjour...' ?
le echo n'est qu'un exemple, la commande pourrait être n'importe quoi d'autre qui affiche un texte sur sa sortie d'erreur/standard ?

PS: j'avais entendu, et c'est resté ancré, que system() est, en général, une mauvaise solution.

Dernière modification par Watael (Le 06/07/2024, à 16:03)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#3 Le 06/07/2024, à 16:27

alrito

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

le echo n'est qu'un exemple, la commande pourrait être n'importe quoi d'autre qui affiche un texte sur sa sortie d'erreur/standard ?

Effectivement, Ce n'est qu'un exemple mais dans mon utilisation j'aurais besoin de system() avec python notamment. Si je veux le passer sous Winehq avec *.exe, là je serai bloqué sans system()

Le bonjour seul fonctionne que comme ça par contre :

#include <stdio.h>
#include <stdlib.h>
int main() {
    char * i;
    i = "Bonjour est bienvenu dans cette fenêtre de terminal\n";

	printf(i);
    return 0;
}

PS : Il faut un peu de gras dans les frites sinon c'est sécos quand même lol


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#4 Le 06/07/2024, à 16:37

Watael

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

je ne fais pas de C(#), alors j'ai fait une recherche rapide, et il semble que ce que tu as écrit devrait fonctionner :

char i = system ("echo Bonjour est bienvenu dans cette fenêtre de terminal");
printf("%s\n", i);

non ?

après pour les frites sans patates et sans huile, je ne comprends pas ce que tu veux.

Dernière modification par Watael (Le 06/07/2024, à 16:38)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#5 Le 06/07/2024, à 17:15

Rafbor

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Bonjour, c'est du C# qui doit tourner sous .Net ? Si oui voir cette page du wiki qui liste quelques exemples.


Xubuntu 22.04 - Mes projets sur Github

En ligne

#6 Le 06/07/2024, à 18:09

kamaris

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

C'est ça que tu veux faire ?

int main (void)
{
  return system ("xfce4-terminal -e \"sh -c 'echo \\\"Bonjour et bienvenue dans cette fenêtre de terminal\\\"; bash'\"");
}

Hors ligne

#7 Le 06/07/2024, à 22:46

alrito

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Bonjour Rafbor et kamaris,

@Rafbor : Non, c'est du language C tout court, viens de changer de titre.

@kamaris : C'est ce que je ne veut pas faire justement. Je veut faire le même principe que pour une fenêtre de chargement d'installation d'un paquet. Le logiciel Qapt a ce genre de fenêtre quand on installe un paquet, on a une fenêtre avec un cadre contenant le terminal dedans.


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#8 Le 06/07/2024, à 23:51

kamaris

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Ah oui mais là on est loin du pur C, il te faut utiliser un toolkit comme Qt ou GTK (j'imagine que pour Qapt c'est Qt).
Tu peux aller voir dans les sources de Qapt comment c'est fait, ça te donnera une idée.

Hors ligne

#9 Le 07/07/2024, à 12:19

Amiralgaby

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Bonjour,

alrito a écrit :

Je voudrais créer une fenêtre qui afficherai le résultat d'une commande inscris dans mon programme

Si on résume, la finalité de ton besoin c'est d'avoir une fenêtre où s'affiche des résultat de commande shell ?

Et si tu commençais par plus simple que du C, genre du pur shell ?

Par exemple j'utilise zenity pour avoir des fenêtres en shell, le code devient bien plus simple.

#!/bin/sh

windowText() {
	zenity --info --text="$1"
}

echo "Bonjour est bienvenu dans cette fenêtre de terminal"

resultat_commande=$(uname -ro) # ta commande qui retourne un résultat

windowText "$resultat_commande"

Vive la communauté du Libre !!!

Hors ligne

#10 Le 08/07/2024, à 12:39

alrito

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

J'ai vue dans les sources de Qapt et c'est du C++.
J'ai observer dans d'autre sources logiciels que le code utilise une fonction du styles : AllocConsole()

Alors pour ce qui est de la conception de la console, j'ai la piste mais pour créer une fenêtre où il y aura la console dans la fenêtre principale et bien c'est une autre paire de manche.


Pour ce qui est de zenity, je ne le connaissais pas jusqu'à présent. Ce logiciel me servira pour d'autres utilisations mais pas là.

Dernière modification par alrito (Le 08/07/2024, à 12:43)


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#11 Le 08/07/2024, à 13:59

kamaris

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

alrito a écrit :

Alors pour ce qui est de la conception de la console, j'ai la piste mais pour créer une fenêtre où il y aura la console dans la fenêtre principale et bien c'est une autre paire de manche.

Ça c'est vraiment rien pour le coup, en GTK ça donnerait

GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GtkWidget *terminal = create_terminal ();
gtk_container_add (GTK_CONTAINER (window), terminal);

et tu as l'équivalent en Qt avec QtMainWindow je crois.
Le problème c'est d'écrire create_terminal().

Voici un exemple GTK avec synaptic, qui est aussi écrit en C++ mais c'est facile à traduire en C : https://github.com/mvo5/synaptic/blob/m … rogress.cc
La partie GTK peut juste être copiée telle quelle en fait, elle fait appel à vte, comme gnome-terminal ou xfce4-terminal.

Hors ligne

#12 Le 09/07/2024, à 14:16

alrito

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Comment fait-on pour avoir GTK "fonctionnel", car moi j'ai des problèmes de dépendance quand je compile un code de test pour voir si GTK est bien installé.

sudo apt-get install libgtk-3-dev
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

int main (void)
{
  printf ("Version de GTK+ utilisee :\n");
  printf ("\tBibliotheque : %d.%d.%d\n", gtk_major_version, gtk_minor_version, gtk_micro_version);
  printf ("\tFichiers d'en tete : %d.%d.%d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
  return EXIT_SUCCESS;
}

Dernière modification par alrito (Le 09/07/2024, à 14:17)


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#13 Le 09/07/2024, à 16:28

kamaris

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Quelle commande utilises-tu pour compiler ?
As-tu ajouté $(pkg-config --cflags --libs gtk+-3.0) à la fin de ta commande ?

Hors ligne

#14 Le 09/07/2024, à 19:06

Amiralgaby

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

Bonsoir,

J'ai réussi à voir un beau terminal.
J'ai télécharger le zip de ce dépôt github

puis j'ai installé

sudo apt install libvte-2.91-dev

Ensuite dans le dépôt, lancer la commande

make

puis lancer l’exécutable "./term"

Pour moi la police par défaut était moche, il faut prendre une police "mono" pour que la largeur des caractères soit la même.

Je suis allé changer la variable "FONT" du ./config/config.h
pour mettre "Bitstream Vera Sans Mono", une police de caractère que je possède.

Dernière modification par Amiralgaby (Le 09/07/2024, à 19:17)


Vive la communauté du Libre !!!

Hors ligne

#15 Le 09/07/2024, à 19:31

Watael

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

je ne comprends toujours pas.

tu dois avoir une interaction avec la commande dans l'appel system() ?
sinon, l'exécution d'un shell dans un terminal pour afficher la sortie d'une commande est superflu, une simple fenêtre qt ou gtk devrait suffire. C'est peut-être même surdimensionné, mais existe-t-il plus simple/léger ?

Dernière modification par Watael (Le 09/07/2024, à 19:37)


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#16 Le 10/07/2024, à 17:34

alrito

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

kamaris : J'utilise cette commande :

gcc main.c -o main

Le petit terminal de Amiralgaby est une bonne piste et je l'utiliserai dans mon projet.

Merci à vous tous pour l'aide apporté.

Dernière modification par alrito (Le 10/07/2024, à 17:35)


Je dirais que le secret pour résoudre un problème, c'est de la patience. On y arrive :)

Hors ligne

#17 Le 10/07/2024, à 18:01

kamaris

Re : [Résolu] Afficher sur une fenêtre le résultat d'une commande en C

alrito a écrit :

kamaris : J'utilise cette commande :

gcc main.c -o main

Eh bien comme je disais il faut faire

gcc main.c -o main $(pkg-config --cflags --libs gtk+-3.0)

Sinon je ne vois pas en quoi utiliser le terminal proposé par Amiralgaby ou tout autre terminal résout le problème, puisque ça reste un programme extérieur qu'il faut lancer d'une manière ou d'une autre, mais si c'est bon pour toi c'est le principal.

Hors ligne