SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
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)]

Mais conteúdo relacionado

Mais procurados

Linux e fs - Storia e caratteristiche vincenti
Linux e fs - Storia e caratteristiche vincentiLinux e fs - Storia e caratteristiche vincenti
Linux e fs - Storia e caratteristiche vincentiMaurizio Antonelli
 
LinuxDay 2005 - Multimedialità con Linux - trascrizione
LinuxDay 2005 - Multimedialità con Linux - trascrizioneLinuxDay 2005 - Multimedialità con Linux - trascrizione
LinuxDay 2005 - Multimedialità con Linux - trascrizioneMaurizio Antonelli
 
Linux e fs storia e caratteristiche vincenti
Linux e fs   storia e caratteristiche vincentiLinux e fs   storia e caratteristiche vincenti
Linux e fs storia e caratteristiche vincentiMaurizio Antonelli
 
Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
 Cosa è Gnu/Linux - Breve storia - Concetti fondamentali Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
Cosa è Gnu/Linux - Breve storia - Concetti fondamentaliFulvio Corno
 
Linux e Free Software - Storia e caratteristiche vincenti
Linux e Free Software - Storia e caratteristiche vincentiLinux e Free Software - Storia e caratteristiche vincenti
Linux e Free Software - Storia e caratteristiche vincentiMaurizio Antonelli
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Relazione Sistemi
Relazione SistemiRelazione Sistemi
Relazione Sistemisebym94
 
FLOSS: Free Software e Open Source
FLOSS: Free Software e Open SourceFLOSS: Free Software e Open Source
FLOSS: Free Software e Open SourcePiergiorgio Borgogno
 
Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaMarco Ferrigno
 
Installazione Linux
Installazione LinuxInstallazione Linux
Installazione Linuxarock84
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaBetter Software
 

Mais procurados (19)

Lezione tre
Lezione treLezione tre
Lezione tre
 
Sistema operativo unix
Sistema operativo unixSistema operativo unix
Sistema operativo unix
 
Linux e fs - Storia e caratteristiche vincenti
Linux e fs - Storia e caratteristiche vincentiLinux e fs - Storia e caratteristiche vincenti
Linux e fs - Storia e caratteristiche vincenti
 
Lezione due
Lezione dueLezione due
Lezione due
 
LinuxDay 2005 - Multimedialità con Linux - trascrizione
LinuxDay 2005 - Multimedialità con Linux - trascrizioneLinuxDay 2005 - Multimedialità con Linux - trascrizione
LinuxDay 2005 - Multimedialità con Linux - trascrizione
 
Linux e fs storia e caratteristiche vincenti
Linux e fs   storia e caratteristiche vincentiLinux e fs   storia e caratteristiche vincenti
Linux e fs storia e caratteristiche vincenti
 
Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
 Cosa è Gnu/Linux - Breve storia - Concetti fondamentali Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
Cosa è Gnu/Linux - Breve storia - Concetti fondamentali
 
Linux e Free Software - Storia e caratteristiche vincenti
Linux e Free Software - Storia e caratteristiche vincentiLinux e Free Software - Storia e caratteristiche vincenti
Linux e Free Software - Storia e caratteristiche vincenti
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Relazione Sistemi
Relazione SistemiRelazione Sistemi
Relazione Sistemi
 
Ubuntu Linux - Corso Base
Ubuntu Linux - Corso BaseUbuntu Linux - Corso Base
Ubuntu Linux - Corso Base
 
Ubuntu Linux
Ubuntu LinuxUbuntu Linux
Ubuntu Linux
 
FLOSS: Free Software e Open Source
FLOSS: Free Software e Open SourceFLOSS: Free Software e Open Source
FLOSS: Free Software e Open Source
 
Xp addio
Xp addioXp addio
Xp addio
 
Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1Sistema Operativo - LInux - Modulo 2.1
Sistema Operativo - LInux - Modulo 2.1
 
Understanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnicaUnderstanding Linux: 20 anni di kernel tra storia e tecnica
Understanding Linux: 20 anni di kernel tra storia e tecnica
 
Installazione Linux
Installazione LinuxInstallazione Linux
Installazione Linux
 
2013 pillole 02
2013 pillole 022013 pillole 02
2013 pillole 02
 
Elio Tondo - Linux In Azienda
Elio Tondo - Linux In AziendaElio Tondo - Linux In Azienda
Elio Tondo - Linux In Azienda
 

Destaque

LinuxDay 2005: Computer Virus e rilevamento
LinuxDay 2005: Computer Virus e rilevamentoLinuxDay 2005: Computer Virus e rilevamento
LinuxDay 2005: Computer Virus e rilevamentoValerio Bruno
 
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...
Server di posta aziendale su protocollo IMAP, antispam, antivirus, webmail, g...Claudio Cardinali
 
guida sommario indice windows 7 reti sicurezza tecniche avanzate
guida sommario indice windows 7 reti sicurezza tecniche avanzateguida sommario indice windows 7 reti sicurezza tecniche avanzate
guida sommario indice windows 7 reti sicurezza tecniche avanzateLibro Windows 7
 
Libro windows 7 reti sicurezza tecniche avanzate
Libro windows 7 reti sicurezza tecniche avanzateLibro windows 7 reti sicurezza tecniche avanzate
Libro windows 7 reti sicurezza tecniche avanzateLibro Windows 7
 
(Manuale) Hardware Personal Computer
(Manuale) Hardware Personal Computer(Manuale) Hardware Personal Computer
(Manuale) Hardware Personal ComputerVirtualdeejay.net
 
Computer Virus e rilevamento
Computer Virus e rilevamentoComputer Virus e rilevamento
Computer Virus e rilevamentoSimone Amati
 
Pericoli nascosti di internet e tipologie di virus
Pericoli nascosti di internet e tipologie di virusPericoli nascosti di internet e tipologie di virus
Pericoli nascosti di internet e tipologie di virusGiovanni Mennea
 
CodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 1 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 1 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
CodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 2 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 2 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
CodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsCodingGym - Lezione 3 - Corso Linux, Android e Internet of Things
CodingGym - Lezione 3 - Corso Linux, Android e Internet of ThingsMirko Mancin
 
Training in Analytics, R and Social Media Analytics
Training in Analytics, R and Social Media AnalyticsTraining in Analytics, R and Social Media Analytics
Training in Analytics, R and Social Media AnalyticsAjay Ohri
 
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika AldabaLightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldaba
Lightning Talk #9: How UX and Data Storytelling Can Shape Policy by Mika Aldabaux singapore
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 

Destaque (16)

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

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

Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreDario Mazza
 
Circolo Izquierda: Anatomia Sistema Linux
Circolo Izquierda: Anatomia Sistema LinuxCircolo Izquierda: Anatomia Sistema Linux
Circolo Izquierda: Anatomia Sistema LinuxPaolo Sammicheli
 
02 linux corso pratica
02 linux corso pratica02 linux corso pratica
02 linux corso praticavincenzo cervi
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxPaolo Campegiani
 
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioniGalliate Linux User Group
 
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...Maurizio Antonelli
 
Linux & Open Source : Lezione Due
Linux & Open Source : Lezione DueLinux & Open Source : Lezione Due
Linux & Open Source : Lezione DueDario Mazza
 
Da Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrareDa Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrareNicola Corti
 
Un Sistema Aperto Per Menti Aperte
Un Sistema Aperto Per Menti AperteUn Sistema Aperto Per Menti Aperte
Un Sistema Aperto Per Menti AperteEmmanuele Bello
 
Da windows a_linux_ot2013
Da windows a_linux_ot2013Da windows a_linux_ot2013
Da windows a_linux_ot2013Pordenone LUG
 
Lezione 6 sound design 1
Lezione 6   sound design 1Lezione 6   sound design 1
Lezione 6 sound design 1Lorenzo Cassulo
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxAlex Palesandro
 
Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!Nicola Corti
 
Beni Culturali 2.1 Introduzione Os
Beni Culturali 2.1 Introduzione OsBeni Culturali 2.1 Introduzione Os
Beni Culturali 2.1 Introduzione OsCaterina Policaro
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationVincenzo Argese
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziareFrancesco Tucci
 
Linux Security Hardening - panoramica sui principi generali per la riduzione...
Linux  Security Hardening - panoramica sui principi generali per la riduzione...Linux  Security Hardening - panoramica sui principi generali per la riduzione...
Linux Security Hardening - panoramica sui principi generali per la riduzione...Marco Ferrigno
 

Semelhante a Introduzione a Linux: differenze con windows e strumenti per la programmazione (19)

Linux & Open Source : Lezione Tre
Linux & Open Source : Lezione TreLinux & Open Source : Lezione Tre
Linux & Open Source : Lezione Tre
 
Circolo Izquierda: Anatomia Sistema Linux
Circolo Izquierda: Anatomia Sistema LinuxCircolo Izquierda: Anatomia Sistema Linux
Circolo Izquierda: Anatomia Sistema Linux
 
02 linux corso pratica
02 linux corso pratica02 linux corso pratica
02 linux corso pratica
 
Distro linux
Distro linuxDistro linux
Distro linux
 
Amministrazione base dei sistemi Linux
Amministrazione base dei sistemi LinuxAmministrazione base dei sistemi Linux
Amministrazione base dei sistemi Linux
 
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
[Ubuntu per tutti] 2, La struttura del sistema e prime operazioni
 
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
LinuxDay 2005 - Linux e FS - Storia e caratteristiche vincenti - versione rid...
 
Linux & Open Source : Lezione Due
Linux & Open Source : Lezione DueLinux & Open Source : Lezione Due
Linux & Open Source : Lezione Due
 
Da Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrareDa Windows a Linux: è tempo di migrare
Da Windows a Linux: è tempo di migrare
 
Un Sistema Aperto Per Menti Aperte
Un Sistema Aperto Per Menti AperteUn Sistema Aperto Per Menti Aperte
Un Sistema Aperto Per Menti Aperte
 
Da windows a_linux_ot2013
Da windows a_linux_ot2013Da windows a_linux_ot2013
Da windows a_linux_ot2013
 
Intro Gnu Linux
Intro Gnu LinuxIntro Gnu Linux
Intro Gnu Linux
 
Lezione 6 sound design 1
Lezione 6   sound design 1Lezione 6   sound design 1
Lezione 6 sound design 1
 
Lezione corso Base GNU/Linux
Lezione corso Base GNU/LinuxLezione corso Base GNU/Linux
Lezione corso Base GNU/Linux
 
Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!Come dove perchè? Ubuntu!
Come dove perchè? Ubuntu!
 
Beni Culturali 2.1 Introduzione Os
Beni Culturali 2.1 Introduzione OsBeni Culturali 2.1 Introduzione Os
Beni Culturali 2.1 Introduzione Os
 
Appunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux CertificationAppunti_01 LPIC-1 Junior Level Linux Certification
Appunti_01 LPIC-1 Junior Level Linux Certification
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziare
 
Linux Security Hardening - panoramica sui principi generali per la riduzione...
Linux  Security Hardening - panoramica sui principi generali per la riduzione...Linux  Security Hardening - panoramica sui principi generali per la riduzione...
Linux Security Hardening - panoramica sui principi generali per la riduzione...
 

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)]