====== Programma di massima modulo Laboratorio Programmazione di Sistema ====== (Per il programma dettagliato e l'ordine corretto di presentazione degli argomenti consultare la sezione __//lezioni ed esercitazioni//__ dell'anno in corso) Il corso intende fornire le conoscenze di base relative alla programmazione C con chiamate di sistema Unix/POSIX. In particolare, vengono prese in considerazione le chiamate standard per il trattamento di file e directory, processi, thread, segnali, pipe, socket e vari meccanismi di sincronizzazione. **Prerequisiti**: Una buona conoscenza di C ** Argomenti Trattati ** * Strumenti per la programmazione C in ambiente GNU (e dintorni) * compilazione e linking * suddivisione di un programma in moduli. * Makefile * debugging con gdb e valgrind * Unix e la shell * Unix: concetti di base, comandi/utility * La shell di Unix * introduzione alla shell * cenni agli script * personalizzazione con alias ed opzioni e variabili * espansione (alias, storia, tilde, percorso, variabili, sostituzione di comando, espressioni aritmetiche) * quoting * Controllo dell'I/O: ridirezione * Exit status * Combinare comandi * pipe * sequenza non condizionale * sequenze condizionali &&, || * comandi composti (uso di {...} e (...) ) * Operatori su stringhe (pattern matching) * Costrutti di controllo * condizionale (if) e test * iterazione limitata (for) * scelta multipla (case) * iterazione illimitata (while e do/while) * menu' con select * C e la programmazione di sistema * cos'e' una System Call * gestione sistematica degli errori * consigli pratici di programmazione * convenzioni e commenti * I file * concetti base dei FS Unix * operazioni di base (open, read, write, close, lseek) * differenza tra chiamate di libreria e system call (write vs fwrite) * link: concetti e system call per la gestione * manipolare e accedere alle informazioni sui file (stat, fcntl, ioctl) * gestione delle directory (opendir,readdir,...,closedir) * duplicazione di descrittori (dup e dup2) * I processi * il modello fork/exec * gestione dei figli (wait), exit status * atexit(), _atexit() * I thread POSIX * i modello a thread * creazione e distruzione * mutex e variabili di condizione * soluzione tipici problemi di concorrenza * Maccanismi di IPC : Pipe e Socket * Pipe anonime * Cenni alle pipe con nome (FIFO) * Modello client-server * Socket per comunicazione locale (AF_UNIX) * Cenni ai socket per comunicazione in rete (AF_INET) * Segnali * Concetti generali: eventi asincroni, gestori di eventi * Ignorare, gestire, mascherare ed attendere i segnali * Gestione dei segnali con i processi e con i thread * Utilizzo di sigwait * Pattern tipici di server concorrenti