#1 Le 12/11/2013, à 12:24
- levieuxsourd2
Comment focntionne un terminal ?
Bonjour a tous,
Je suis depuis longtemps un utilisateur linux. Et je viens de me poser une question ?
Comment fonctionne un terminal ?
J'ai déjà programmer mon propre shell, mais comment fonctionne le terminal pour pouvoir afficher les info, etc ?
Je me suis poser la question, en me demandant : Et pourquoi pas créer son propre terminal ?!
Merci d'avance.
Hors ligne
#2 Le 12/11/2013, à 12:49
- ssdg
Re : Comment focntionne un terminal ?
Si je devais en faire un je dirais:
1) démarrer
2) remplacer les entrées et sorties standard du programme appelé (en général, un shell) par des flux à nous.
3) écrire dans le flux d'entrée en brut les saisies clavier (sauf si tu veux intercepter les alt+qqch ou les Ctrl+V)
4) lire dans ces flux ( et dans une copie des entrées clavier) les choses à afficher et les envoyer dans une zone graphique. En n'oubliant pas de lire la spec ("xterm 256 colour mode" (cf kitty). Et puis du coté de comment ncurse marche aussi ) , qui définit certains caractères ou groupes de caractères qui signalent: une fin de ligne, un changement de coordonnées, un changement de couleurs, ...)
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#3 Le 12/11/2013, à 13:52
- J5012
Re : Comment focntionne un terminal ?
le code source des shells est dispo, mais y en a des tonnes : ash, bash zsh csh ksh sh dsh yash .... sans compter les emulateurs de terminaux divers et varies
Hors ligne
#4 Le 12/11/2013, à 16:55
- ssdg
Re : Comment focntionne un terminal ?
le code source des shells est dispo, mais y en a des tonnes : ash, bash zsh csh ksh sh dsh yash .... sans compter les emulateurs de terminaux divers et varies
Casse la joie. Le plaisir est dans la ré-invention perpétuelle de la roue \o/
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne
#5 Le 14/11/2013, à 10:58
- tiramiseb
Re : Comment focntionne un terminal ?
Salut,
Comment fonctionne un terminal ?
Le terminal, c'est juste un logiciel qui t'affiche le retour de commandes en mode texte et qui envoie aux commandes ce que tu tapes au clavier. Ça sert juste à émuler un ordinateur en "mode console".
J'ai déjà programmer mon propre shell
Programmé ton propre shell !?
J'imagine que tu veux plutôt dire que tu as écrit un ou des shellscript(s), non ?
mais comment fonctionne le terminal pour pouvoir afficher les info
Il intercepte et redirige l'entrée standard, la sortie standard et la sortie d'erreur des programmes qu'il exécute.
L'écrasante majorité du temps, il exécute un shell ; c'est alors le shell qui te permet de taper des commandes et d'exécuter tel ou tel programme... ou d'exécuter un shellscript...
Je me suis poser la question, en me demandant : Et pourquoi pas créer son propre terminal ?!
Il y en a déjà des dizaines : xterm, aterm, GNOME Terminal, Konsole, Xfce Terminal, LXTerminal... et ce n'est que la partie émergée de l'iceberg.
Quelle en serait l'utilité ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 15/11/2013, à 13:51
- levieuxsourd2
Re : Comment focntionne un terminal ?
bonjour, merci pour vos réponses.
J'ai bien crée mon propre shell sur le modèle de bash.
Il fonctionne plutôt bien et a les principales fonctions.
Je veux créer mon propre terminal juste a titre d'exercice personnel.
Donc si je comprends bien il y a deux choses a faire :
- lire la sorte standard du Shell exécute : read(1) ?
- catcher les touches claviers et les écrire sur l’entrée standard : write(0) ?
Hors ligne
#7 Le 15/11/2013, à 14:21
- tiramiseb
Re : Comment focntionne un terminal ?
J'ai bien crée mon propre shell sur le modèle de bash.
Ok, tu utilisais donc les termes et tu es à un niveau bien plus avancé que ce que j'imaginais en lisant ton premier message... désolé de t'avoir sous-estimé
Donc si je comprends bien il y a deux choses a faire :
- lire la sorte standard du Shell exécute : read(1) ?
- catcher les touches claviers et les écrire sur l’entrée standard : write(0) ?
Pour "catcher" les touches clavier, en général c'est géré par le toolkit graphique que tu utilises... dans ce cas, autant se servir des fonctions du toolkit...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#8 Le 15/11/2013, à 14:37
- levieuxsourd2
Re : Comment focntionne un terminal ?
ok merci de ta réponse, pour catcher les touches oui le plus simples étant de se servir du toolkit comme tu le dis.
Par contre je me vois pas comment je peux exécuter le shell et lire et écrire.
Est comme dans mon exemple les bon vieux appels system tout simple comme ceci :
read(1, buff, SIZE_BUFF - 1);
write(0, buff, SIZE_BUFF);
Si c'est seulement c'est plus simple que je ne le pensais.
Hors ligne
#9 Le 15/11/2013, à 19:36
- ssdg
Re : Comment focntionne un terminal ?
En fait, l'idée est de faire ce qu'il faut faire c'est utiliser certaines fonctions de la lib standard ou de posix (je ne sais plus lequel) pour:
1) définir 3 pipes (ou deux si tu veux fusionner les sorties en une seule)
2) forker
3) dans le fils (c'est mieux), fermer l'entrée du pipe du clavier et fermer la sortie des(du) pipes liés aux sorties. remplacer les entrées/sorties standard (1 à 3) par la sortie du pipe clavier et les entrées des pipes ecran.
4) utiliser l'appel système qui execute un autre processus en lieu et place du processus courant. (de ce que je me souvient, il y a plusieurs méthodes différentes en fonction de si tu veux propager l'environnement (tu le veux) et/ou passer des paramètres.
4) dans le père, tu ferme les bouts de pipe qui sont encore ouvertes chez le fils.
5) Toujours dans le père (le fils à été remplacé par ton binaire de shell), tu as maintenant trois (deux) flux d'entrées/sorties qui correspondent à ce que ton shell lit et écrit.
Je crois que les fonctions suivantes seront intéressantes:
http://pubs.opengroup.org/onlinepubs/00 … /pipe.html
http://pubs.opengroup.org/onlinepubs/00 … /dup2.html
http://pubs.opengroup.org/onlinepubs/00 … std.h.html (en particulier les fonctions exec*)
Dernière modification par ssdg (Le 15/11/2013, à 19:44)
s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.
Hors ligne