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 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 tongue

Hors ligne

#4 Le 12/11/2013, à 16:55

ssdg

Re : Comment focntionne un terminal ?

J5012 a écrit :

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 tongue

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,

levieuxsourd2 a écrit :

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é ?

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é smile

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...

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