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 NeoX . Évalué à 1.
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 sby13 . Évalué à 1.
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
[^] # Re: faux probleme... gestion de deux fenêtres par un programme C
Posté par NeoX . Évalué à 1.
lire le cours de C pour apprendre à creer des flux supplementaires.
[^] # Creer des flux d'entree/sortie supplémentaire
Posté par sby13 . Évalué à 1.
Je suis très intéressée par la création de flux supplémentaires.
Le livre que j'ai en langage C n'évoque pas ce sujet et sur le net, je n'ai pas trouvé d'informations.
Si tu m'en dire plus ou me conseiller un site ou un livre, ça serait sympa.
Merci. sby13
[^] # Re: Creer des flux d'entree/sortie supplémentaire
Posté par NeoX . Évalué à 1.
[^] # Re: faux probleme... gestion de deux fenêtres par un programme C
Posté par ecyrbe . Évalué à 5.
Pour celà, l'outil classique ce sont les Pipes nommés, ça permet de faire communiquer simplement deux programmes, voir plus...
cf: man 3 mkfifo
voilà... amuse toi bien!
# Plus d'infos
Posté par Obsidian . Évalué à 5.
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 sby13 . Évalué à 1.
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 ecyrbe . Évalué à 2.
cf :man ncurses
[^] # Re: Plus d'infos
Posté par Obsidian . Évalué à 5.
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.