Introduzione a Linux: differenze con windows e strumenti per la programmazione
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 220 views

Introduction to Linux, gcc & gdb (in Italian).

Introduction to Linux, gcc & gdb (in Italian).

Statistics

Views

Total Views
220
Views on SlideShare
219
Embed Views
1

Actions

Likes
0
Downloads
3
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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.orgDistributed 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 lintegrazione! (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 LinuxDistributed 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 dellutente 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 allavvio del sistema. ● /sbin : contiene i programmi per lamministrazione 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 dellutente 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 lunmount 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: – lutente proprietario del file ed i permessi che questultimo 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 lesecuzione.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/bashDistributed 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. – Linterfaccia grafica potrebbe non essere presente sulla macchina che stiamo usando (eg. server). – Potrebbe essere lunico 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 macchinaDistributed 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 dellutente. ...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 lopzione –help che fa stampare una breve guida del comando. ● es: ls --helpDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 allutilizzo 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 ununica colonna con i loro permessi, gli utenti ed i gruppi associati, la loro dimensione in byte, lultima data di modifica; – -h mostra la dimensione dei file nellordine di grandezza più comodo per la lettura da essere umano; questa opzione deve essere usata insieme allopzione l.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.itDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 cartellaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 cartellaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 unespressione regolare.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 lesecuzione.● 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 allutilizzo 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 allutilizzo 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 allutilizzo 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 quellargomento.● man -a <argomento> – Visualizza tutte le pagine relative a quellargomento.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 allutilizzo 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 stringaDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 allutilizzo 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 allutilizzo di Linux da shell Collegamento tra programmi E possibile costruire una sequenza di programmi collegata dai flussi, in modo che lSTDOUT del programma[x] è lSTDIN del programma[x+1].... ... P[x-1] P[x] P[x+1]Per creare questo collegamento usiamo il simbolo pipe | (quelloa sx dell1 e sopra il backslash ).Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Introduzione allutilizzo 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 linsieme delle righe. ● Utile per cercare una chiamata di funzione in un file di codice C. ● Applicare più operazioni su un file: ● cat fileCompresso | decomprimi | stampaDistributed 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.orgDistributed 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 programmaDistributed 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 librerieDistributed 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 lesecuzione 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 lesecuzione 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 è unoperazione 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/gdbDistributed 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 lopzione -g ; ● Eseguite gdb <nomeProgramma> ; ● A questo punto potete controllare lesecuzione 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 allinizio 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 lesecuzione 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 nellesecuzione dellistruzione; ● finish – Continua lesecuzione 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 lesecuzione del programma; ● display <variabile> oppure display <espressione> – come print, ma la stampa viene ripetuta ad ogni interruzione del programma; ● continue – riprende lesecuzione 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 dellinput si ferma nel caso lutente inserisca la parola basta. ● Le inserisca in un array di parole ● Al termine ristampi tutte le parole Assumiamo che lutente non sbagli MAI la procedura di inserimentoDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it Inizio Strutturiamo ilLeggi una parola dallinput codice.. è basta NO Aggiungila nellarray ? Fine SI Stampa tutte le parole nellarrayDistributed 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 dellinput; il problema è che memorizza anche questo carattere nel buffer. ● Quindi se lutente 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à lultima 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 larray, vi è sempre il valore sentinella basta che completa la serie. ● In fase di inserimento bisogna controllare che nellarray 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 nellarray NON sono inizializzati aNULL: ciò significa che se non lo fa automaticamenteil sistema, andremo a chiamare la free() su puntatorinon allocati dinamicamente.Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
  • www.torlug.org www.cs.uniroma2.it www.torlug.orgDistributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]