EXEMPLES ET EXERCICES 1. adresses sites Quelques adresses utiles : http://www.rubycentral.com/book/ // le livre de reference http://www.rubycentral.com/ref/ // ref. classes avec listes des fonctions par classe http://www.ruby-doc.org/core/ // voir les classes IO File File::Stat Dir FileTest Process 2. exemples de scripts NB: tester d'abord les exemples avant de faire les exercices proposés. A. manipulation du SGF ====================== Bcp de classes participent à la manipulation des objets "système" : File, Dir, IO, etc... - exemple 1 : création d'un fichier et remplissage à partir d'infos saisies au clavier (testSgf_1.rb) - exemple 2 : ouverture et affichage des informations sur un fichier (stat) (testSgf_2.rb) - exemple 3 : ouverture d'un fichier avec vérification existence et recherche des lignes ou apparait un motif donne . Le nom du fichier et le motif sont passés en paramètres au script (testSgf_3.rb) - exemple 4 : afficher la liste des fichiers d'un repertoire donne (testSgf_4.rb) - Exercices à faire - Exercice 1 : écrire un script < histo > qui construit et affiche l'histogramme de repartition par taille des fichiers du repertoire . Nous aimerions connaître la taille totale de fichiers examinés, le nombre total de ces derniers et le nombre total de blocs. Ainsi que la taille moyenne d'un fichier. On definit classes de repartition de taille identique à usage : histo.rb - Exercice 2 : écrire un script qui recherche tous les fichiers contenant un motif donné. On affichera le nom du fichier et la ligne contenant le motif. Attention, si plusieurs lignes du même fichier contiennent , on n'affichera qu'une fois le chemin absolu du fichier. usage : cherche [filtre] [path] B. manipulation de processus, signaux ===================================== - exemple 1 : création d'un processus fils (testProc_1.rb) Si on comment les lignes if avec les exit, on obtient ceci : Pere 28716 Grand pere 28715 pid fils1 : nil pid fils2 : nil Pere 28715 Grand pere 28713 pid fils1 : nil pid fils2 : 28716 Pere 28717 Grand pere 28713 pid fils1 : 28715 pid fils2 : nil Pere 28713 Grand pere 22590 pid fils1 : 28715 pid fils2 : 28717 Donc le petit fils ne connait pas les autres Le fils 2 se connait Le fils 1 aussi Et le père connait les fils 1 et 2 - exemple 2 : communication entre un proc. père et un proc. fils avec un tube (testProc_2.rb) - exemple 3 : communication entre un proc. père et un proc. fils avec un tube (2) (testProc_3.rb) Si on enlève le wr.close du Process.fork, alors le programme bloque, car quelqu'un utilise toujours le WR ! - exemple 4 : chronomètre (testSig_1.rb) - Exercices à faire - Exercice 1 : écrire un script qui exécute la commande "ls -l" en affichant le résultat en majuscule. On utilisera 2 processus et un tube pour communiquer. Le proc. fils exécute la commande et le proc. père affiche en majuscule. NB: pour passer en mode debug, lancer : ruby -r debug ./testFile.rb