Ziirish's Home :: Blog

Ziirish's Pub

 
 

Hé oui, très peu présents "numériquement" depuis quelques semaines/mois.

En réalité, ce n'est pas un bien grand mal. Je "m'éclate" assez au boulot pour ne plus ressentir le besoin de geeker à l'extérieur comme par le passé.

J'entends bien que cette phrase peut blesser/déranger les gens qui ne considèrent leur travail que comme un moyen de payer les factures ou bien mon ancien employeur s'il passe dans le coin (bien que j'ai appris beaucoup, je ne me sentais pas à ma place sur la fin ;) ).

Tout ça pour dire que oui, les gens/geeks comme moi peuvent avoir une vie à côté.

Et qu'est-ce qu'on fait quand on ne geek pas ? Plein de choses comme du sport (oui, oui), des sorties avec les amis au cinéma, dans les bars, etc. et plein d'autres choses.

Mais voilà, au fond je reste ce que je suis (on ne se refait pas comme ça). Et comme c'est les vacances, il n'y a rien d'interessant au cinéma ou à la télé, ma ville est quasi déserte (façon de parler), bref, il fallait bien que je trouve de quoi m'occuper.

Et c'est en triant mes e-mails datant de l'époque où j'étais en première année de DUT (quand le "moi" actuel est né en fait) que je suis tombé sur mes TPs de C. À l'époque le C n'était pour moi rien d'autre que la troisième lettre de l'alphabet latin...

Le sujet sur lequel je suis retombé nous demandait d'implémenter le fonctionnement du Shell en mode interactif et sans s'occuper du parsage de la ligne de commande.

Autant dire que ce sujet n'a pas du me marquer plus que ça puisque je n'ai effectivement appris le fonctionnement du Shell que bien après. Du coup, je me suis dit que pour m'amuser ça serait sympa à faire "sérieusement" cette fois.

C'est ainsi que shelldone est né.

Sauf que cette fois, je m'occupe aussi de parser la ligne de commande. Il s'avère que pour l'exemple du Shell c'est beaucoup plus compliqué que je ne le pensais ! Et c'est ce qui rend le sujet intéressant.

L'utilité de ce projet est proche de zéro, il existe déjà de très bons Shell tels que zsh, ksh, ou bash pour ne citer qu'eux. Shelldone ne jouera jamais dans la même cour, mais c'est le premier projet que je "mets au monde" en C (bien que CID ait été presque totalement ré-écris, c'est Askelon qui avait commencé le projet. De plus, une très grosse partie du "core" de CID est inspirée/copiée (avec l'accord de son auteur) du projet cairo-dock ). De fait, je peux facilement me concentrer sur la gestion de la mémoire puisque pour l'instant je refait tout from scratch. Je n'ai pas encore regardé comment les autres Shell font, mais j'ai trouvé intéressant de découper chaque ligne en une liste doublement chaînée de commandes. Le seul séparateur actuellement supporté étant le '|' (pipe).

Bref, voici un petit appérçu, et je pense que je ne manquerai pas de vous faire part de la suite de cette aventure !


ziirish@pluto:~/Documents/dev/shelldone$ valgrind ./shelldone
==21778== Memcheck, a memory error detector
==21778== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==21778== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==21778== Command: ./shelldone
==21778== 
ziirish@pluto:~/Documents/dev/shelldone$ test | une commande avec des arguments | puis 'une autre avec "un seul" argument'
nb commands: 3
=== Dump cmd n°1 ===
cmd: test
argc: 0
=== Dump cmd n°2 ===
cmd: une
argc: 4
argv[0]: commande
argv[1]: avec
argv[2]: des
argv[3]: arguments
=== Dump cmd n°3 ===
cmd: puis
argc: 1
argv[0]: une autre avec "un seul" argument
ziirish@pluto:~/Documents/dev/shelldone$ quit
==21778== 
==21778== HEAP SUMMARY:
==21778==     in use at exit: 0 bytes in 0 blocks
==21778==   total heap usage: 31 allocs, 31 frees, 1,915 bytes allocated
==21778== 
==21778== All heap blocks were freed -- no leaks are possible
==21778== 
==21778== For counts of detected and suppressed errors, rerun with: -v
==21778== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)