Forum Programmation.c Gérer deux sorties écran avec un programme en C

Posté par  .
Étiquettes : aucune
0
3
juil.
2007
Bonsoir à tous,

Je débute en programmation C. J'ai un projet à réaliser pour lequel je dois gérer deux sorties écran, une dédiée pour de l'affichage 'graphique' et une pour l'interface des questions/réponses avec l'utilisateur. Les réponses de l'utilisateur entraineront des modifications d'affichage sur l'écran dit 'graphique'.
Attention, quand je dis graphique, c'est très basique; j'ai besoin de représenter un schéma de distribution électrique.
Avec la fonction fprintf, je peux rediriger vers l'écran (stdout) mais je n'ai trouvé de solution pour la gestion de deux fenêtres différentes.

Si quelqu'un peut m'aider ...
Merci d'avance. sby13
  • # faux probleme...

    Posté par  . Évalué à 1.

    Ton probleme n'est pas dans la gestion de 2 ecrans mais de deux flux de sortie.

    Tu peux creer un flux de sortie supplementaire (en plus de STDOUT, STDERR, STDIN)

    Chaque fenetre (qui seront sur 2 ecrans si tu dispose de 2 ecrans) gerant/utilisant un des flux.

    Tu peux aussi utiliser les techniques de communications inter-processus, mais c'est peut-etre un poil plus compliqué.
    • [^] # Re: faux probleme... gestion de deux fenêtres par un programme C

      Posté par  . Évalué à 1.

      Concernant les flux de sorties, je pensais que STDERR était réservé à la gestion des erreurs et STDIN au flux d'entrée.

      Mon message n'était peut être pas très clair mais en fait le programme :
      - affiche dans une fenêtre, un schéma que je pense faire sous simple console (car je ne maîtrise pas les interfaces graphiques évoluées)
      - affiche les questions/réponses avec l'utilisateur sur une autre fenêtre toujours type console.

      Les réponses que va donner l'utilisateur modifieront le schéma affiché dans la fenêtre dédié au réseau électrique et entrainera une question supplémentaire dans la fenêtre question/réponse et ainsi de suite.

      Si tu peux m'en dire plus sur la possibilité d'avoir deux flux de sorties vers des fenêtres différentes ...

      Merci. sby13
  • # Plus d'infos

    Posté par  . Évalué à 5.

    'faudrait que tu nous dises exactement ce que ton prof' attend de toi.

    Attention, quand je dis graphique, c'est très basique; j'ai besoin de représenter un schéma de distribution électrique.


    Oui, mais ça doit quand même être graphique (c'est-à-dire utiliser l'interface) ou bien est-ce que tu dois dessiner un environnement dans une console texte ? Parce que l'approche à avoir va être radicalement différente.

    Dans le premier cas, tu vas ouvrir une connexion vers le serveur X ou exploiter une bibliothèque toute faite comme GTK ou Qt, gérer des événements, etc. tout en continuant à lire et écrire dans stdin/stdout pour dialoguer avec l'utilisateur.

    Dans le second, tu ne travailleras qu'avec des flux type stdin/stdout mais il te faudra toi-même ouvrir un terminal et le fichier spécial qui lui est associé.
    • [^] # Re: Plus d'infos

      Posté par  . Évalué à 1.

      L'utilisation d'une interface graphique comme GTK permettrait d'avoir une meilleure interface avec l'utilisateur mais je ne connais pas GTK.

      En un premier temps, je pensais faire un affichage dans une console texte. En fait, une fenêtre console pour l'affichage du réseau et une fenêtre console pour l'affichage des questions/réponses de l'utilisateur.
      En fonction des réposnes de l'utilisateur, l'affichage du réseau sera modifié (sur une console) et une autre question sera posée (dans la console question/réponse).

      Ensuite, quand toutes les fonctionnalités seront opérationnelles et s'il me reste du temps, alors j'aimerai bien essayer d'utiliser GTK.

      Quand tu dis qu'il faut que j'ouvre moi-même un terminal et le fichier spécial associé, que veux-tu dire exactement? Merci d'avance !

      sby13.
      • [^] # Re: Plus d'infos

        Posté par  . Évalué à 2.

        en plus de la solution utilisant les pipes, je te propose de jeter un oeil à la bibliothèque ncurses, qui te permettra de facilement faire la transition si jamais tu veux faire un programme en gtk plus tard...
        cf :man ncurses
      • [^] # Re: Plus d'infos

        Posté par  . Évalué à 5.

        Bon, en fait, je dis GTK comme ça, mais c'est loin d'être la bibliothèque la plus facile à utiliser ! Par contre, elle est bien documentée ...

        Sinon, je veux dire que si tu comptes utiliser deux consoles, il faudra déjà ouvrir toi-même ces deux consoles. C'est normal dans le cas de la première puisque c'est depuis cette console que tu vas lancer ton programme. En outre, les flux d'entrée et de sortie seront ouverts pour toi.

        Ensuite, pour gérer une deuxième console, essaie de voir comment on peut écrire dedans. La solution, c'est que chaque console est reliée à un fichier spécial (un /dev) qui permet de communiquer avec.

        Plus précisément : dans le cas de terminaux physiques réels, ceux-ci sont en général reliés sur le port série, il faut donc envoyer des données sur ce port pour qu'elles apparaissent sur le terminal. Pour ce faire, on écrit dans /dev/ttyS0, par exemple.

        Quand on utilise des terminaux virtuels en nombre indéfini depuis un serveur X, ils utilisent des fichiers spéciaux qui se comportent comme des pipes dans /dev/pts/... qui simulent le canal normalement emprunté.

        Essaie d'ouvrir un terminal, puis un second. Dans le deuxième, tapes tty. Tu sauras à quel fichier ton xterm est attaché. Par exemple /dev/pts/1

        Ensuite, depuis le premier, essaie de taper « echo "Bonjour" > /dev/pts/1 » et regarde ce qu'il se passe. Note : il se peut que tu n'aies pas les droits pour le faire.

        L'idée est donc d'utiliser des fopen() ordinaires pour ouvrir des fichiers en lecture et écriture vers ce /dev et dont tu noterais les descripteurs « auxin » et « auxout », par exemple (par analogie avec stdin et stdout).

        Ensuite, tu choisis la console dans laquelle tu veux travailler et tu les gère toutes deux de la même façon.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.