SlideShare a Scribd company logo
www.torlug.org                                        www.cs.uniroma2.it

              Corso di Laboratorio di Programmazione dei calcolatori 2007



                 Introduzione a Linux
        Differenze con Windows e strumenti per la programmazione




                            valerio.bruno@torlug.org


Distributed under GNU Free Documentation License        © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                            Cos'è Linux ?
  ●   Il cuore di un sistema operativo (Linux Kernel)
       –   Sviluppato inizialmente da Linus Torvalds, oggi da una
           comunità di persone che lavorano delocalizzate.
       –   Software Libero!
  ●   Distribuzione GNU-Linux (Linux Distro): un sistema
      operativo completo (Kernel + Compilatore + Applicazioni)
       –   TANTI sistemi operativi Linux ( http://distrowatch.com/ ).




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                        Distro Linux: Pro
  ●   Software Libero !
      –   Modificabile
      –   In rapida evoluzione
      –   Gratuito
  ●   Sicuro e stabile
      –   Virus? Quali virus?
      –   Esecuzione esplicita di programmi = Eliminazione
          necessità firewall.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                        Distro Linux: Pro
  ●   Vasta comunità di utenti
       –   Forum e LUG di supporto.
       –   Nuovi amici
  ●   Grande varietà di software.




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Distro Linux: Contro
  ●   Mancanza del supporto hardware.
  ●   Integrazione funzionalità desktop sufficiente ma
      ancora da migliorare.
  ●   Milioni di programmi, centinaia di distro: che
      fatica l'integrazione! (per fortuna ci sono i
      gestori di pacchetti che risolvono le
      dipendenze)
  ●   Mancanza di supporto sui normali canali
      commerciali.
Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                    www.cs.uniroma2.it


                   Distro Linux: Quale ?
  http://reallylinux.com/docs/choosinglinux.shtml




 http://www.ubuntulinux.com                        http://www.opensuse.org/



Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




                     Il filesystem di Linux




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
                       Differenze con Windows
  ●   In Linux i file sono ordinati in una unica
      gerarchia di cartelle.
  ●   I percorsi si indicano con il front-slash / e non
      con il back-slash  .
Ad esempio i file dell'utente pippo si trovano in:
                                /home/pippo/
invece che in “c:Documents and Settingspippo”

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
              Descrizione generale delle cartelle
  ●   /boot : contiene i file necessari all'avvio del sistema.
  ●   /sbin : contiene i programmi per l'amministrazione del
      sistema (es: configurazione hardware).
  ●   /bin: contiene programmi di utilità.
  ●   /lib: contiene le librerie utilizzabili dai vostri programmi.
  ●   /etc : contiene i file di configurazione del sistema.
  ●   /home : contiene i file personali degli utenti.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
             Descrizione generale delle cartelle 2
  ●   /root : la home dell'utente root.
  ●   /mnt : contiene i mount point per altre periferiche di
      memoria di massa.
  ●   /lost+found : file recuperati da blocchi di sistema
  ●   /dev : contiene file che rappresentano periferiche
      hardware.
  ●   /proc : contiene file che rappresentano processi.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



                    Il filesystem di Linux
             Descrizione generale delle cartelle 3
  ●   /opt : contiene programmi non previsti dal sistema di
      base.
  ●   /var : contiene file variabili (log di sistema, archivi di
      progetto, .... ).
  ●   /tmp : contiene file temporanei.
  ●   /usr : contiene file e programmi degli utenti condivisi
      tra gli utenti.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



                    Il filesystem di Linux
                     Differenze con Windows 2

  ●   Linux è case sensitive !!! (come il C)
  ●   Le applicazioni sono “sparse” per il filesystem.

  Dal momento che non esistono i drive (A per il floppy ,
  C per il disco fisso, D per il cdrom, ....), come accedo
  ad i file sul mio floppy disk o sulla mia penna usb ?

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                www.cs.uniroma2.it



                    Il filesystem di Linux
                     Differenze con Windows 3
 ●   Per accedere ad i file su un dispositivo esterno (floppy
     disk, penna usb, ecc..) devo prima fare (o il sistema,
     dopo aver rilevato la periferica, esegue) il mount del
     dispositivo.
 ●   I file “appariranno come per magia” in una sotto
     cartella del filesystem.
 ●   Quando ho finito con i file, prima di scollegare il
     dispositivo DEVO fare l'unmount del dispositivo.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
                  Gli utenti, i gruppi ed i loro file

  ●   Linux è un sistema multi-utente;
  ●   Un utente è identificato da una coppia
      username e password;
  ●   Ciò che un utente può fare o non può fare è
      definito da i suoi permessi sui file.
  ●   root è il super utente: può fare tutto su tutti.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
                 Gli utenti, i gruppi ed i loro file 2

  ●   In Linux sono inoltre definiti i gruppi di utenti.
  ●   Un utente appartiene almeno ad un gruppo;
  ●   E' possibile impostare dei permessi specifici ad
      un gruppo, senza dover impostare tali permessi
      ad ogni utente di quel gruppo.



Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                    Il filesystem di Linux
                 Gli utenti, i gruppi ed i loro file 3
  ●   Ad ogni file sono associati:
       –   l'utente proprietario del file ed i permessi che
           quest'ultimo ha sul file stesso.
       –   un gruppo di utenti (generalmente il gruppo principale
           del proprietario) ed i permessi che gli utenti di questo
           gruppo hanno sul file stesso
       –   i permessi concessi a tutti coloro che non sono il
           proprietario e non appartengono al gruppo associato.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                www.cs.uniroma2.it


                   Il filesystem di Linux
               Gli utenti, i gruppi ed i loro file
                                4
 ●   i permessi
     corrispondono a
     3 bit: uno per la
     lettura, uno per
     la scrittura ed
     uno per
     l'esecuzione.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                Utilizzare Linux da shell
                                 Introduzione
  ●   Una shell è un interprete di comandi.
  ●   Lavora in modalità interattiva ma anche batch.
  ●   Esistono tante shell: tcsh, csh, sh, ksh, perchè
      proprio bash?
  ●   Maggiori informazioni sulla bash le trovate su
      http://www.gnu.org/software/bash

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



                Utilizzare Linux da shell
                       Introduzione 2
  ●   Perchè utilizzare la shell quando esistono tante
      belle interfacce grafiche?
      –   Per alcune cose utilizzare la shell è più veloce.
      –   L'interfaccia grafica potrebbe non essere presente
          sulla macchina che stiamo usando (eg. server).
      –   Potrebbe essere l'unico modo per accedere ad una
          funzionalità.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



                Utilizzare Linux da shell
                    Primo incontro con il mostro
  ●   Si accede alla shell
      –   quando ci si logga in modalità testuale
      –   tramite il programma Konsole di KDE
      –   tramite il programma Terminale di Gnome
      –   ... tramite un qualche programma di un qualche
          window manager
      –   collegandosi da remoto alla macchina

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                Utilizzare Linux da shell
                  Primo incontro con il mostro 2
  ●   Si presenta come un prompt
       nomeUtente@nomeComputer
        percorsoCartellaSelezionata $



  ●   Il carattere ~ (tilde) indica la home folder dell'utente.

                         ...ed è lì, immobile, che attende i vostri
                         comandi...
Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                 Utilizzare Linux da shell
               Convenzioni per i comandi
  ●   Quando si inserisce un comando questo può
      avere parametri ed opzioni; in generale:
      –   le opzioni vanno prima dei parametri;
      –   le opzioni sono precedute dal meno – o dal doppio
          meno -- ;
      –   quasi tutti i comandi hanno l'opzione –help che fa
          stampare una breve guida del comando.
           ●   es: ls --help


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
                         Navigare il filesystem
●   Con il comando cd è possibile spostarsi tra le
    cartelle
     –   utilizzando un path (relativo o assouluto) come
         parametro, la shell ci porta alla cartella puntata
         dal path.
     –   senza parametri ci fa ritornare nella home;
     –   utilizzando i .. come parametro saliamo la
         gerarchia di un livello;


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


  Introduzione all'utilizzo di Linux da shell
                             Visualizzare i file
  ●   Con il comando ls è possibile esaminare il contenuto di una
      cartella; alcune opzioni interessanti:
      –   -a mostra i file nascosti;
      –   -l mostra i file in un'unica colonna con i loro permessi, gli
          utenti ed i gruppi associati, la loro dimensione in byte,
          l'ultima data di modifica;
      –   -h mostra la dimensione dei file nell'ordine di grandezza
          più comodo per la lettura da essere umano; questa
          opzione deve essere usata insieme all'opzione l.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


      Introduzione all'utilizzo di Linux da
                     shell
                              Gestione dei file
●   rm <nomeFile>
     –   Cancella un file
●   rm -r <nomeCartella>
     –   Cancella una cartella e tutte le sottocartelle
●   mv <nomeFile> <nuovoPath>
     –   Sposta un file nel nuova cartella


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


      Introduzione all'utilizzo di Linux da
                     shell
                            Gestione dei file 2
●   nano <nomeFile> oppure pico <nomeFile>
     –   Crea/modifica un file
●   mv <nomeFile> <nuovoNomeFile>
     –   Rinomina un file
●   mkdir <nomeCartella>
     –   Crea una cartella

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it



    Introduzione all'utilizzo di Linux da shell
                               Cercare un file

●   find <percorsoInizioRicerca> -name <schemaNomeFile>
     –   Ricerca dal percorso indicato in tutte le sottocartelle i
         file corrispondenti allo schema passato.
●   find <percorsoInizioRicerca> -regex <schemaNomeFile>
     –   Come il precedente tranne che lo schema passato e'
         un'espressione regolare.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
                   Cambiare i permessi su un file
●   chmod <soggettoPermessi> < + oppure - ><permesso> <file>
    –   soggettoPermessi: u per utente proprietario, g per gruppo del
        file, o per tutti gli altri.
    –   permesso: r per la lettura, w per la scrittura, x per
        l'esecuzione.
●   Esempio:
    –   chmod og-wx file1
         ●   rimuove a tutti coloro che non sono il proprietario il diritto
             di scrittura e di esecuzione.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
                       Eseguire un programma
●   ./<nomeProgramma>
     –   naturalmente chi prova ad eseguirlo deve avere il
         permesso di farlo.
     –   E' possibile evitare di usare il ./ solo se il programma è
         contenuto in una cartella indicata nella variabile di
         ambiente PATH.
     –   Se il programma non è nella cartella corrente, sostituire
         il ./ con il percorso alla cartella del programma.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
                  Cambiare la propria password
●   passwd
     –   richiede la vecchia password per assicurarsi che siete
         il proprietario della password.
     –   richiede la nuova password.




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
             La guida di riferimento per i comandi
●   man <comando> oppure man <funzione>
     –   Visualizza la prima pagina relativa a quel
         comando/funzione.
●   man <numPagina> <argomento>
     –   Visualizza la pagina <numPagina> relativa a
         quell'argomento.
●   man -a <argomento>
     –   Visualizza tutte le pagine relative a quell'argomento.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                        www.cs.uniroma2.it


  Introduzione all'utilizzo di Linux da shell
                       I flussi di un programma

                        Programma
                                                   STDOUT (1)
       STDIN (0)



                                              STDERR (2)




Distributed under GNU Free Documentation License        © 2007 Valerio Bruno [O(n)]
www.torlug.org                                 www.cs.uniroma2.it


    Introduzione all'utilizzo di Linux da shell
             La guida di riferimento per i comandi
●   cat <file>
     –   Stampa il contenuto di un file a video.
●   grep <stringa>
     –   Legge il flusso di input e ne ristampa solo le righe che
         contengono la stringa




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it

       Introduzione all'utilizzo di Linux da shell
                              Redirezione su file
   E' possibile redirigere i flussi standard da/verso un file:
   ●   <comando> < <file di input>
       ●   Il contenuto del <file di input> viene usato come flusso STDIN
           per il comando.
   ●   <comando> > <file di output>
       ●   Lo STDOUT del programma viene salvato su <file di output>.
   ●   <comando> 2> <file di error>
       ●   Lo STDERR del programma viene salvato su <file di error>.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                       www.cs.uniroma2.it

       Introduzione all'utilizzo di Linux da shell
                                Redirezione su file
   Esempi:
   ●   ls --help > aiutoLs.txt
       ●   Stampa la guida di ls dentro il file aiutoLs.txt

       ●   sendmail destinatario@server.com < email
           ●   Invia una email il cui contenuto è scritto nel file.

   ●   Automazione trasferimento file in remoto con ftp.


Distributed under GNU Free Documentation License       © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it

      Introduzione all'utilizzo di Linux da shell
                      Collegamento tra programmi
 E' possibile costruire una sequenza di programmi collegata dai
 flussi, in modo che l'STDOUT del programma[x] è l'STDIN del
 programma[x+1].


...                                                                     ...
            P[x-1]                    P[x]                    P[x+1]

Per creare questo collegamento usiamo il simbolo pipe | (quello
a sx dell'1 e sopra il backslash  ).

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it

      Introduzione all'utilizzo di Linux da shell
                       Collegamento tra programmi
  Esempi:
  ●   cat file1 | grep parola
      ●   Stampa le righe di file1 che contengono parola
      ●   Si possono concatenare più grep per restringere l'insieme
          delle righe.
      ●   Utile per cercare una chiamata di funzione in un file di codice
          C.
      ●   Applicare più operazioni su un file:
          ●   cat fileCompresso | decomprimi | stampa

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




             gcc – GNU C Compiler

   ●   Parte del progetto GNU
   ●   Supporta lo standard originale del linguaggio C (C89)
       ed il più recente C99
   ●   In realtà gcc oggi sta per GNU Compilers Collection
   ●   Homepage del progetto http://gcc.gnu.org

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                  gcc -GNU C Compiler
                    Il processo di compilazione

 ●   pre-process                        esegue le #macro

 ●   compile                           crea un codice intermedio
                                       vicino a quello macchina
 ●   assemble                          Trasforma il codice intermedio
                                       in codice macchina
 ●   link
                                       Collega le varie parti di codice,
                                       ordinandole in un programma
Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                        www.cs.uniroma2.it


                  gcc -GNU C Compiler
              Cominciamo a compilare qualcosa
  ●   gcc <nomeSorgente.c>
  ●   preprocessa, compila, assembla e linka
  ●   nessun output (a schermo)
                                                   #include <stdio.h>
  ●   produce un eseguibile a.out                  int main()
                                                   {
                                                     printf("Hello World!");
                                                     return 0;
                                                   }

Distributed under GNU Free Documentation License       © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                  gcc -GNU C Compiler
                          Opzioni interessanti
  ●   -o <nomeFile>
      –   specifica il nome del file generato dalla
          compilazione (invece di a.out);
  ●   -l <nomeLibreria>
      –   fa il link usando una libreria: questa opzione può
          essere ripetuta;


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it

                  gcc -GNU C Compiler
               Opzioni interessanti 2
  ●   -D <MACRO>=<valoreMacro>
      –   definisce la macro prima di processare i file;
  ●   -I <path>
      –   specifica una cartella in cui il compilatore deve
          cercare file da includere di default (quelli tra <>);
  ●   -L <path>
      –   specifica una cartella in cui il compilatore deve
          cercare le librerie

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                  gcc -GNU C Compiler
                         Opzioni interessanti 3
  ●   --std=c89 oppure --std=c99
      –   specifica che la compilazione deve essere eseguita
          secondo lo standard
  ●   --pedantic
      –   specifica che il compilatore deve dare errore per
          QUALSIASI cosa che non è conforme allo
          standard.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                  gcc -GNU C Compiler
                         Opzioni interessanti 4
  ●   -E
      –    Preprocessa i file in input e stampa a video il
           risultato;
  ●   -S
      –    Preprocessa e compila: non assembla né linka;
  ●   -c
      –    Preprocessa, compila ed assembla, ma non linka.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                  gcc -GNU C Compiler
      Errori comuni: distinzione tra include e librerie
  ●   Negli header file vanno le dichiarazioni, non le
      definizioni;
  ●   Al gcc vanno passati solo i file .c ;
  ●   Quando si utilizza una libreria esterna non basta
      includere le sue dichiarazioni ma bisogna anche
      linkare il corpo delle sue funzioni;
  ●   La libreria standard viene linkata automaticamente;

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                               Debugging
  ●   Un debugger è uno strumento che permette di:
      –   controllare l'esecuzione di un programma che avete
          scritto, interrompendola o riprendendola in un
          determinato momento.
      –   controllare lo stato del vostro programma (variabili,
          stack ed altro..)
  ●   ovvero di studiare l'esecuzione del codice da
      voi scritto per determinare se ci sono dei casi in
      cui si verificano anomalie (bug).

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                               Debugging
  ●   Scoprire bachi utilizzando un debugger è
      un'operazione piuttosto tediosa ed andrebbe evitata
      per quanto possibile:
      –   facendo una buona progettazione PRIMA ( ad es. con
          diagrammi di flusso e schemi dei moduli)
      –   utilizzando regole di buona programmazione ( ad es.
          evitare le variabili globali, utilizzare dei nomi di variabili
          comprensibili)

                             ... ma se proprio ci siamo presi un
                             baco ...
Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




             gdb – GNU Debugger

  ●   Debugger molto potente con interfaccia
      utilizzabile da shell.
  ●   Fa parte del progetto GNU
  ●   Maggiori informazioni su
      http://www.gnu.org/software/gdb

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



             gdb – GNU Debugger

  ●   Per utilizzare il debugger sul vostro programma
      dovete compilarlo con l'opzione -g ;
  ●   Eseguite gdb <nomeProgramma> ;
  ●   A questo punto potete controllare l'esecuzione
      del programma inserendo comandi al prompt di
      gdb.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


            gdb – GNU Debugger
                              Comandi
  ●   break <nomeFunzione> oppure break <nomefile>:<riga>
      –   Inserisce un breakpoint all'inizio della funzione o alla
          riga indicata;
  ●   print <nomeVariabile> oppure print <espressione>
      –   stampa il contenuto di una variabile o il valore di una
          espressione;
  ●   run
      –   Fa partire l'esecuzione del programma;

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


             gdb – GNU Debugger
                             Comandi 2
  ●   next
       –   Va avanti di una istruzione;
  ●   step
       –   entra nell'esecuzione dell'istruzione;
  ●   finish
       –   Continua l'esecuzione del programma finchè la
           funzione corrente non termina;


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                gdb – GNU Debugger
   ●   kill
                             Comandi 3
        –     interrompe l'esecuzione del programma;
   ●   display <variabile> oppure display <espressione>
        –     come print, ma la stampa viene ripetuta ad ogni
              interruzione del programma;
   ●   continue
        –     riprende l'esecuzione del programma finché non
              incontra un breakpoint o il programma non termina;

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


             gdb – GNU Debugger
             Navigare la pila delle chiamte
  ●   backtrace
       –   mostra la pila delle chiamate;
  ●   frame <numeroChiamata>
       –   seleziona la chiamata di funzione associata al
           numero passato;




Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                         www.cs.uniroma2.it


        Scrivere un programma che...
   ●   Prenda in input una serie di parole
       –   Divise dal carattere a capo
       –   La lettura dell'input si ferma nel caso l'utente
           inserisca la parola basta.
   ●   Le inserisca in un array di parole
   ●   Al termine ristampi tutte le parole

  Assumiamo che l'utente                           non     sbagli        MAI      la
  procedura di inserimento
Distributed under GNU Free Documentation License         © 2007 Valerio Bruno [O(n)]
www.torlug.org                                     www.cs.uniroma2.it

         Inizio                                Strutturiamo il
Leggi una parola dall'input
                                                  codice..



             è basta            NO
                                               Aggiungila nell'array
                ?


                                                                         Fine
                          SI
                                 Stampa tutte le parole nell'array

Distributed under GNU Free Documentation License     © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




                 Vediamo il
                 codice...


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                           Bug numero 1
   ●   Ho usato la funzione fgets senza aver letto bene il
       suo funzionamento sul manuale.
   ●   Quando la funzione incontra un a capo 'n'
       interrompe la lettura dell'input; il problema è che
       memorizza anche questo carattere nel buffer.
   ●   Quindi se l'utente scrive basta, nel buffer verrà
       scritto “bastan” ed il primo ciclo non sarà mai
       terminato.


Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                         Bug numero 2
  ●   Questa è un errore grave: in C le stringhe in
      realtà sono puntatori; il buffer usato per
      memorizzare le parole è sempre lo stesso!
  ●   Quindi nelle celle dell array avremo sempre lo
      stesso puntatore, che conterrà l'ultima parola
      che ci abbiamo scritto sopra (“basta”).
  ●   Cosi quando stampiamo le parole ne stampa
      una serie tutte uguali.

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it



                         Bug numero 3
 ●   Oltre alle parole inserite, dentro l'array, vi è
     sempre il valore sentinella basta che
     completa la serie.
 ●   In fase di inserimento bisogna controllare che
     nell'array non ci finisca il valore sentinella.
     Oppure cambiare il ciclo 1.



Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it


                        Errore stealth...
  ●   Non appare su tutti i sistemi...
  ●   E' dovuto a qualcosa che lo standard non
      definisce...
  ●   Provoca un SEGMENTATION FAULT !! (ovvero
      accesso a memoria non allocata!)

Tutti i puntatori nell'array NON sono inizializzati a
NULL: ciò significa che se non lo fa automaticamente
il sistema, andremo a chiamare la free() su puntatori
non allocati dinamicamente.
Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]
www.torlug.org                                   www.cs.uniroma2.it




          www.torlug.org

Distributed under GNU Free Documentation License   © 2007 Valerio Bruno [O(n)]

More Related Content

ODP
Corso linux base
PDF
Corso Linux
PDF
Corso formazione Linux
PPT
Presentazione Linux
PDF
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
PDF
Linux & Open Source - Lezione 2
ODP
Presentazione del Software Libero e di Ubuntu al Linux Day 25 ottobre 2014
Corso linux base
Corso Linux
Corso formazione Linux
Presentazione Linux
LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
Linux & Open Source - Lezione 2
Presentazione del Software Libero e di Ubuntu al Linux Day 25 ottobre 2014

What's hot (19)

PDF
PDF
Sistema operativo unix
ODP
Linux e fs - Storia e caratteristiche vincenti
PDF
PDF
LinuxDay 2005 - Multimedialità con Linux - trascrizione
ODP
Linux e fs storia e caratteristiche vincenti
PDF
Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
ODP
Linux e Free Software - Storia e caratteristiche vincenti
PDF
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PPTX
Relazione Sistemi
ODP
Ubuntu Linux - Corso Base
ODP
Ubuntu Linux
KEY
FLOSS: Free Software e Open Source
PDF
Xp addio
PPTX
Sistema Operativo - LInux - Modulo 2.1
PDF
Understanding Linux: 20 anni di kernel tra storia e tecnica
PDF
Installazione Linux
PDF
2013 pillole 02
PDF
Elio Tondo - Linux In Azienda
Sistema operativo unix
Linux e fs - Storia e caratteristiche vincenti
LinuxDay 2005 - Multimedialità con Linux - trascrizione
Linux e fs storia e caratteristiche vincenti
Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
Linux e Free Software - Storia e caratteristiche vincenti
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
Relazione Sistemi
Ubuntu Linux - Corso Base
Ubuntu Linux
FLOSS: Free Software e Open Source
Xp addio
Sistema Operativo - LInux - Modulo 2.1
Understanding Linux: 20 anni di kernel tra storia e tecnica
Installazione Linux
2013 pillole 02
Elio Tondo - Linux In Azienda
Ad

Viewers also liked (16)

PDF
LinuxDay 2005: Computer Virus e rilevamento
PDF
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
PDF
guida sommario indice windows 7 reti sicurezza tecniche avanzate
PDF
Libro windows 7 reti sicurezza tecniche avanzate
PDF
GNU Linux introduction
PDF
(Manuale) Hardware Personal Computer
PDF
Computer Virus e rilevamento
PDF
Pericoli nascosti di internet e tipologie di virus
PPTX
Gli antivirus
PDF
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
PDF
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
PDF
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
PPTX
Training in Analytics, R and Social Media Analytics
PDF
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
PDF
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
PDF
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
LinuxDay 2005: Computer Virus e rilevamento
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
guida sommario indice windows 7 reti sicurezza tecniche avanzate
Libro windows 7 reti sicurezza tecniche avanzate
GNU Linux introduction
(Manuale) Hardware Personal Computer
Computer Virus e rilevamento
Pericoli nascosti di internet e tipologie di virus
Gli antivirus
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
Training in Analytics, R and Social Media Analytics
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Ad

Similar to Introduzione a Linux: differenze con windows e strumenti per la programmazione (20)

ODP
Lezione corso Base GNU/Linux
PDF
02 linux corso pratica
PDF
Amministrazione base dei sistemi Linux
PPTX
Linux shell
PPTX
Linux shell
PDF
Un Sistema Aperto Per Menti Aperte
PPT
Sistema operativo Unix e Linux
PDF
Fondamenti di GNU/Linux: FileSystem e Partizioni
PDF
Intro Gnu Linux
PDF
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
PDF
Lug Roma3 Corso Linux Base
ODP
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
PDF
Linux & Open Source : Lezione Due
PDF
Appunti_01 LPIC-1 Junior Level Linux Certification
PDF
Linux & Open Source : Lezione Tre
ODT
Distro linux
PDF
Linux nelle PMI
PDF
Gestione dischi - File system - LVM
ODP
RiminiLUG. Mini Corso su Linux p1: Installazione & Configurazione
Lezione corso Base GNU/Linux
02 linux corso pratica
Amministrazione base dei sistemi Linux
Linux shell
Linux shell
Un Sistema Aperto Per Menti Aperte
Sistema operativo Unix e Linux
Fondamenti di GNU/Linux: FileSystem e Partizioni
Intro Gnu Linux
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
Lug Roma3 Corso Linux Base
RiminiLUG. Mini Corso su Linux p2: Networking & Terminal
Linux & Open Source : Lezione Due
Appunti_01 LPIC-1 Junior Level Linux Certification
Linux & Open Source : Lezione Tre
Distro linux
Linux nelle PMI
Gestione dischi - File system - LVM
RiminiLUG. Mini Corso su Linux p1: Installazione & Configurazione

Introduzione a Linux: differenze con windows e strumenti per la programmazione

  • 1. www.torlug.org www.cs.uniroma2.it Corso di Laboratorio di Programmazione dei calcolatori 2007 Introduzione a Linux Differenze con Windows e strumenti per la programmazione valerio.bruno@torlug.org Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 2. www.torlug.org www.cs.uniroma2.it Cos'è Linux ? ● Il cuore di un sistema operativo (Linux Kernel) – Sviluppato inizialmente da Linus Torvalds, oggi da una comunità di persone che lavorano delocalizzate. – Software Libero! ● Distribuzione GNU-Linux (Linux Distro): un sistema operativo completo (Kernel + Compilatore + Applicazioni) – TANTI sistemi operativi Linux ( http://distrowatch.com/ ). Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 3. www.torlug.org www.cs.uniroma2.it Distro Linux: Pro ● Software Libero ! – Modificabile – In rapida evoluzione – Gratuito ● Sicuro e stabile – Virus? Quali virus? – Esecuzione esplicita di programmi = Eliminazione necessità firewall. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 4. www.torlug.org www.cs.uniroma2.it Distro Linux: Pro ● Vasta comunità di utenti – Forum e LUG di supporto. – Nuovi amici ● Grande varietà di software. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 5. www.torlug.org www.cs.uniroma2.it Distro Linux: Contro ● Mancanza del supporto hardware. ● Integrazione funzionalità desktop sufficiente ma ancora da migliorare. ● Milioni di programmi, centinaia di distro: che fatica l'integrazione! (per fortuna ci sono i gestori di pacchetti che risolvono le dipendenze) ● Mancanza di supporto sui normali canali commerciali. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 6. www.torlug.org www.cs.uniroma2.it Distro Linux: Quale ? http://reallylinux.com/docs/choosinglinux.shtml http://www.ubuntulinux.com http://www.opensuse.org/ Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 7. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 8. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows ● In Linux i file sono ordinati in una unica gerarchia di cartelle. ● I percorsi si indicano con il front-slash / e non con il back-slash . Ad esempio i file dell'utente pippo si trovano in: /home/pippo/ invece che in “c:Documents and Settingspippo” Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 9. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle ● /boot : contiene i file necessari all'avvio del sistema. ● /sbin : contiene i programmi per l'amministrazione del sistema (es: configurazione hardware). ● /bin: contiene programmi di utilità. ● /lib: contiene le librerie utilizzabili dai vostri programmi. ● /etc : contiene i file di configurazione del sistema. ● /home : contiene i file personali degli utenti. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 10. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle 2 ● /root : la home dell'utente root. ● /mnt : contiene i mount point per altre periferiche di memoria di massa. ● /lost+found : file recuperati da blocchi di sistema ● /dev : contiene file che rappresentano periferiche hardware. ● /proc : contiene file che rappresentano processi. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 11. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Descrizione generale delle cartelle 3 ● /opt : contiene programmi non previsti dal sistema di base. ● /var : contiene file variabili (log di sistema, archivi di progetto, .... ). ● /tmp : contiene file temporanei. ● /usr : contiene file e programmi degli utenti condivisi tra gli utenti. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 12. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows 2 ● Linux è case sensitive !!! (come il C) ● Le applicazioni sono “sparse” per il filesystem. Dal momento che non esistono i drive (A per il floppy , C per il disco fisso, D per il cdrom, ....), come accedo ad i file sul mio floppy disk o sulla mia penna usb ? Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 13. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Differenze con Windows 3 ● Per accedere ad i file su un dispositivo esterno (floppy disk, penna usb, ecc..) devo prima fare (o il sistema, dopo aver rilevato la periferica, esegue) il mount del dispositivo. ● I file “appariranno come per magia” in una sotto cartella del filesystem. ● Quando ho finito con i file, prima di scollegare il dispositivo DEVO fare l'unmount del dispositivo. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 14. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file ● Linux è un sistema multi-utente; ● Un utente è identificato da una coppia username e password; ● Ciò che un utente può fare o non può fare è definito da i suoi permessi sui file. ● root è il super utente: può fare tutto su tutti. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 15. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 2 ● In Linux sono inoltre definiti i gruppi di utenti. ● Un utente appartiene almeno ad un gruppo; ● E' possibile impostare dei permessi specifici ad un gruppo, senza dover impostare tali permessi ad ogni utente di quel gruppo. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 16. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 3 ● Ad ogni file sono associati: – l'utente proprietario del file ed i permessi che quest'ultimo ha sul file stesso. – un gruppo di utenti (generalmente il gruppo principale del proprietario) ed i permessi che gli utenti di questo gruppo hanno sul file stesso – i permessi concessi a tutti coloro che non sono il proprietario e non appartengono al gruppo associato. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 17. www.torlug.org www.cs.uniroma2.it Il filesystem di Linux Gli utenti, i gruppi ed i loro file 4 ● i permessi corrispondono a 3 bit: uno per la lettura, uno per la scrittura ed uno per l'esecuzione. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 18. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Introduzione ● Una shell è un interprete di comandi. ● Lavora in modalità interattiva ma anche batch. ● Esistono tante shell: tcsh, csh, sh, ksh, perchè proprio bash? ● Maggiori informazioni sulla bash le trovate su http://www.gnu.org/software/bash Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 19. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Introduzione 2 ● Perchè utilizzare la shell quando esistono tante belle interfacce grafiche? – Per alcune cose utilizzare la shell è più veloce. – L'interfaccia grafica potrebbe non essere presente sulla macchina che stiamo usando (eg. server). – Potrebbe essere l'unico modo per accedere ad una funzionalità. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 20. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Primo incontro con il mostro ● Si accede alla shell – quando ci si logga in modalità testuale – tramite il programma Konsole di KDE – tramite il programma Terminale di Gnome – ... tramite un qualche programma di un qualche window manager – collegandosi da remoto alla macchina Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 21. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Primo incontro con il mostro 2 ● Si presenta come un prompt nomeUtente@nomeComputer percorsoCartellaSelezionata $ ● Il carattere ~ (tilde) indica la home folder dell'utente. ...ed è lì, immobile, che attende i vostri comandi... Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 22. www.torlug.org www.cs.uniroma2.it Utilizzare Linux da shell Convenzioni per i comandi ● Quando si inserisce un comando questo può avere parametri ed opzioni; in generale: – le opzioni vanno prima dei parametri; – le opzioni sono precedute dal meno – o dal doppio meno -- ; – quasi tutti i comandi hanno l'opzione –help che fa stampare una breve guida del comando. ● es: ls --help Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 23. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Navigare il filesystem ● Con il comando cd è possibile spostarsi tra le cartelle – utilizzando un path (relativo o assouluto) come parametro, la shell ci porta alla cartella puntata dal path. – senza parametri ci fa ritornare nella home; – utilizzando i .. come parametro saliamo la gerarchia di un livello; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 24. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Visualizzare i file ● Con il comando ls è possibile esaminare il contenuto di una cartella; alcune opzioni interessanti: – -a mostra i file nascosti; – -l mostra i file in un'unica colonna con i loro permessi, gli utenti ed i gruppi associati, la loro dimensione in byte, l'ultima data di modifica; – -h mostra la dimensione dei file nell'ordine di grandezza più comodo per la lettura da essere umano; questa opzione deve essere usata insieme all'opzione l. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 25. www.torlug.org www.cs.uniroma2.it Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 26. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Gestione dei file ● rm <nomeFile> – Cancella un file ● rm -r <nomeCartella> – Cancella una cartella e tutte le sottocartelle ● mv <nomeFile> <nuovoPath> – Sposta un file nel nuova cartella Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 27. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Gestione dei file 2 ● nano <nomeFile> oppure pico <nomeFile> – Crea/modifica un file ● mv <nomeFile> <nuovoNomeFile> – Rinomina un file ● mkdir <nomeCartella> – Crea una cartella Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 28. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Cercare un file ● find <percorsoInizioRicerca> -name <schemaNomeFile> – Ricerca dal percorso indicato in tutte le sottocartelle i file corrispondenti allo schema passato. ● find <percorsoInizioRicerca> -regex <schemaNomeFile> – Come il precedente tranne che lo schema passato e' un'espressione regolare. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 29. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Cambiare i permessi su un file ● chmod <soggettoPermessi> < + oppure - ><permesso> <file> – soggettoPermessi: u per utente proprietario, g per gruppo del file, o per tutti gli altri. – permesso: r per la lettura, w per la scrittura, x per l'esecuzione. ● Esempio: – chmod og-wx file1 ● rimuove a tutti coloro che non sono il proprietario il diritto di scrittura e di esecuzione. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 30. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Eseguire un programma ● ./<nomeProgramma> – naturalmente chi prova ad eseguirlo deve avere il permesso di farlo. – E' possibile evitare di usare il ./ solo se il programma è contenuto in una cartella indicata nella variabile di ambiente PATH. – Se il programma non è nella cartella corrente, sostituire il ./ con il percorso alla cartella del programma. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 31. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Cambiare la propria password ● passwd – richiede la vecchia password per assicurarsi che siete il proprietario della password. – richiede la nuova password. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 32. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell La guida di riferimento per i comandi ● man <comando> oppure man <funzione> – Visualizza la prima pagina relativa a quel comando/funzione. ● man <numPagina> <argomento> – Visualizza la pagina <numPagina> relativa a quell'argomento. ● man -a <argomento> – Visualizza tutte le pagine relative a quell'argomento. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 33. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell I flussi di un programma Programma STDOUT (1) STDIN (0) STDERR (2) Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 34. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell La guida di riferimento per i comandi ● cat <file> – Stampa il contenuto di un file a video. ● grep <stringa> – Legge il flusso di input e ne ristampa solo le righe che contengono la stringa Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 35. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Redirezione su file E' possibile redirigere i flussi standard da/verso un file: ● <comando> < <file di input> ● Il contenuto del <file di input> viene usato come flusso STDIN per il comando. ● <comando> > <file di output> ● Lo STDOUT del programma viene salvato su <file di output>. ● <comando> 2> <file di error> ● Lo STDERR del programma viene salvato su <file di error>. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 36. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Redirezione su file Esempi: ● ls --help > aiutoLs.txt ● Stampa la guida di ls dentro il file aiutoLs.txt ● sendmail destinatario@server.com < email ● Invia una email il cui contenuto è scritto nel file. ● Automazione trasferimento file in remoto con ftp. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 37. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Collegamento tra programmi E' possibile costruire una sequenza di programmi collegata dai flussi, in modo che l'STDOUT del programma[x] è l'STDIN del programma[x+1]. ... ... P[x-1] P[x] P[x+1] Per creare questo collegamento usiamo il simbolo pipe | (quello a sx dell'1 e sopra il backslash ). Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 38. www.torlug.org www.cs.uniroma2.it Introduzione all'utilizzo di Linux da shell Collegamento tra programmi Esempi: ● cat file1 | grep parola ● Stampa le righe di file1 che contengono parola ● Si possono concatenare più grep per restringere l'insieme delle righe. ● Utile per cercare una chiamata di funzione in un file di codice C. ● Applicare più operazioni su un file: ● cat fileCompresso | decomprimi | stampa Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 39. www.torlug.org www.cs.uniroma2.it gcc – GNU C Compiler ● Parte del progetto GNU ● Supporta lo standard originale del linguaggio C (C89) ed il più recente C99 ● In realtà gcc oggi sta per GNU Compilers Collection ● Homepage del progetto http://gcc.gnu.org Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 40. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Il processo di compilazione ● pre-process esegue le #macro ● compile crea un codice intermedio vicino a quello macchina ● assemble Trasforma il codice intermedio in codice macchina ● link Collega le varie parti di codice, ordinandole in un programma Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 41. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Cominciamo a compilare qualcosa ● gcc <nomeSorgente.c> ● preprocessa, compila, assembla e linka ● nessun output (a schermo) #include <stdio.h> ● produce un eseguibile a.out int main() { printf("Hello World!"); return 0; } Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 42. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti ● -o <nomeFile> – specifica il nome del file generato dalla compilazione (invece di a.out); ● -l <nomeLibreria> – fa il link usando una libreria: questa opzione può essere ripetuta; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 43. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 2 ● -D <MACRO>=<valoreMacro> – definisce la macro prima di processare i file; ● -I <path> – specifica una cartella in cui il compilatore deve cercare file da includere di default (quelli tra <>); ● -L <path> – specifica una cartella in cui il compilatore deve cercare le librerie Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 44. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 3 ● --std=c89 oppure --std=c99 – specifica che la compilazione deve essere eseguita secondo lo standard ● --pedantic – specifica che il compilatore deve dare errore per QUALSIASI cosa che non è conforme allo standard. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 45. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Opzioni interessanti 4 ● -E – Preprocessa i file in input e stampa a video il risultato; ● -S – Preprocessa e compila: non assembla né linka; ● -c – Preprocessa, compila ed assembla, ma non linka. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 46. www.torlug.org www.cs.uniroma2.it gcc -GNU C Compiler Errori comuni: distinzione tra include e librerie ● Negli header file vanno le dichiarazioni, non le definizioni; ● Al gcc vanno passati solo i file .c ; ● Quando si utilizza una libreria esterna non basta includere le sue dichiarazioni ma bisogna anche linkare il corpo delle sue funzioni; ● La libreria standard viene linkata automaticamente; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 47. www.torlug.org www.cs.uniroma2.it Debugging ● Un debugger è uno strumento che permette di: – controllare l'esecuzione di un programma che avete scritto, interrompendola o riprendendola in un determinato momento. – controllare lo stato del vostro programma (variabili, stack ed altro..) ● ovvero di studiare l'esecuzione del codice da voi scritto per determinare se ci sono dei casi in cui si verificano anomalie (bug). Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 48. www.torlug.org www.cs.uniroma2.it Debugging ● Scoprire bachi utilizzando un debugger è un'operazione piuttosto tediosa ed andrebbe evitata per quanto possibile: – facendo una buona progettazione PRIMA ( ad es. con diagrammi di flusso e schemi dei moduli) – utilizzando regole di buona programmazione ( ad es. evitare le variabili globali, utilizzare dei nomi di variabili comprensibili) ... ma se proprio ci siamo presi un baco ... Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 49. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● Debugger molto potente con interfaccia utilizzabile da shell. ● Fa parte del progetto GNU ● Maggiori informazioni su http://www.gnu.org/software/gdb Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 50. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● Per utilizzare il debugger sul vostro programma dovete compilarlo con l'opzione -g ; ● Eseguite gdb <nomeProgramma> ; ● A questo punto potete controllare l'esecuzione del programma inserendo comandi al prompt di gdb. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 51. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Comandi ● break <nomeFunzione> oppure break <nomefile>:<riga> – Inserisce un breakpoint all'inizio della funzione o alla riga indicata; ● print <nomeVariabile> oppure print <espressione> – stampa il contenuto di una variabile o il valore di una espressione; ● run – Fa partire l'esecuzione del programma; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 52. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Comandi 2 ● next – Va avanti di una istruzione; ● step – entra nell'esecuzione dell'istruzione; ● finish – Continua l'esecuzione del programma finchè la funzione corrente non termina; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 53. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger ● kill Comandi 3 – interrompe l'esecuzione del programma; ● display <variabile> oppure display <espressione> – come print, ma la stampa viene ripetuta ad ogni interruzione del programma; ● continue – riprende l'esecuzione del programma finché non incontra un breakpoint o il programma non termina; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 54. www.torlug.org www.cs.uniroma2.it gdb – GNU Debugger Navigare la pila delle chiamte ● backtrace – mostra la pila delle chiamate; ● frame <numeroChiamata> – seleziona la chiamata di funzione associata al numero passato; Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 55. www.torlug.org www.cs.uniroma2.it Scrivere un programma che... ● Prenda in input una serie di parole – Divise dal carattere a capo – La lettura dell'input si ferma nel caso l'utente inserisca la parola basta. ● Le inserisca in un array di parole ● Al termine ristampi tutte le parole Assumiamo che l'utente non sbagli MAI la procedura di inserimento Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 56. www.torlug.org www.cs.uniroma2.it Inizio Strutturiamo il Leggi una parola dall'input codice.. è basta NO Aggiungila nell'array ? Fine SI Stampa tutte le parole nell'array Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 57. www.torlug.org www.cs.uniroma2.it Vediamo il codice... Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 58. www.torlug.org www.cs.uniroma2.it Bug numero 1 ● Ho usato la funzione fgets senza aver letto bene il suo funzionamento sul manuale. ● Quando la funzione incontra un a capo 'n' interrompe la lettura dell'input; il problema è che memorizza anche questo carattere nel buffer. ● Quindi se l'utente scrive basta, nel buffer verrà scritto “bastan” ed il primo ciclo non sarà mai terminato. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 59. www.torlug.org www.cs.uniroma2.it Bug numero 2 ● Questa è un errore grave: in C le stringhe in realtà sono puntatori; il buffer usato per memorizzare le parole è sempre lo stesso! ● Quindi nelle celle dell array avremo sempre lo stesso puntatore, che conterrà l'ultima parola che ci abbiamo scritto sopra (“basta”). ● Cosi quando stampiamo le parole ne stampa una serie tutte uguali. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 60. www.torlug.org www.cs.uniroma2.it Bug numero 3 ● Oltre alle parole inserite, dentro l'array, vi è sempre il valore sentinella basta che completa la serie. ● In fase di inserimento bisogna controllare che nell'array non ci finisca il valore sentinella. Oppure cambiare il ciclo 1. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 61. www.torlug.org www.cs.uniroma2.it Errore stealth... ● Non appare su tutti i sistemi... ● E' dovuto a qualcosa che lo standard non definisce... ● Provoca un SEGMENTATION FAULT !! (ovvero accesso a memoria non allocata!) Tutti i puntatori nell'array NON sono inizializzati a NULL: ciò significa che se non lo fa automaticamente il sistema, andremo a chiamare la free() su puntatori non allocati dinamicamente. Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • 62. www.torlug.org www.cs.uniroma2.it www.torlug.org Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]