ebook img

Guida alla Programmazione in Linux PDF

749 Pages·2011·8.43 MB·Italian
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Guida alla Programmazione in Linux

GaPiL Guida alla Programmazione in Linux Simone Piccardi 13 dicembre 2011 ii Copyright (cid:13)c 2000-2009 Simone Piccardi. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being “Un preambolo” in “Prefazione”, with no Front- Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled“GNU Free Documentation License”. Indice Un preambolo xiii Prefazione xv I Programmazione di sistema 1 1 L’architettura del sistema 3 1.1 Una panoramica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1 Concetti base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Il kernel e il sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.3 Chiamate al sistema e librerie di funzioni . . . . . . . . . . . . . . . . . . 5 1.1.4 Un sistema multiutente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2 Gli standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.1 Lo standard ANSI C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2.2 I tipi di dati primitivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.3 Lo standard System V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.4 Lo“standard”BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.5 Gli standard IEEE – POSIX . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.2.6 Gli standard X/Open – Opengroup – Unix . . . . . . . . . . . . . . . . . 12 1.2.7 Il controllo di aderenza agli standard . . . . . . . . . . . . . . . . . . . . . 13 2 L’interfaccia base con i processi 19 2.1 Esecuzione e conclusione di un programma . . . . . . . . . . . . . . . . . . . . . 19 2.1.1 La funzione main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.2 Come chiudere un programma . . . . . . . . . . . . . . . . . . . . . . . . 20 2.1.3 Le funzioni exit e _exit . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.1.4 Le funzioni atexit e on_exit . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.1.5 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2 I processi e l’uso della memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.1 I concetti generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.2 La struttura della memoria di un processo . . . . . . . . . . . . . . . . . . 23 2.2.3 Allocazione della memoria per i programmi C . . . . . . . . . . . . . . . . 25 2.2.4 Il controllo della memoria virtuale . . . . . . . . . . . . . . . . . . . . . . 29 2.2.5 Gestione avanzata dell’allocazione della memoria . . . . . . . . . . . . . . 32 2.3 Argomenti, ambiente ed altre propriet`a di un processo . . . . . . . . . . . . . . . 34 2.3.1 Il formato degli argomenti . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.2 La gestione delle opzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3.3 Le variabili di ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3.4 La localizzazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 iii iv INDICE 2.4 Problematiche di programmazione generica . . . . . . . . . . . . . . . . . . . . . 40 2.4.1 Il passaggio delle variabili e dei valori di ritorno . . . . . . . . . . . . . . . 40 2.4.2 Il passaggio di un numero variabile di argomenti . . . . . . . . . . . . . . 41 2.4.3 Potenziali problemi con le variabili automatiche . . . . . . . . . . . . . . . 43 2.4.4 Il controllo di flusso non locale . . . . . . . . . . . . . . . . . . . . . . . . 43 2.4.5 La endianess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3 La gestione dei processi 47 3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.1.1 L’architettura della gestione dei processi . . . . . . . . . . . . . . . . . . . 47 3.1.2 Una panoramica sulle funzioni fondamentali . . . . . . . . . . . . . . . . . 49 3.2 Le funzioni di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.2.1 Gli identificatori dei processi . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.2.2 La funzione fork e le funzioni di creazione dei processi . . . . . . . . . . . 51 3.2.3 La conclusione di un processo . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.2.4 Le funzioni di attesa e ricezione degli stati di uscita . . . . . . . . . . . . 59 3.2.5 La funzione exec e le funzioni di esecuzione dei programmi . . . . . . . . 64 3.3 Il controllo di accesso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.3.1 Gli identificatori del controllo di accesso . . . . . . . . . . . . . . . . . . . 68 3.3.2 Le funzioni di gestione degli identificatori dei processi . . . . . . . . . . . 70 3.3.3 Le funzioni per la gestione dei gruppi associati a un processo . . . . . . . 73 3.4 La gestione della priorit`a dei processi . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.4.1 I meccanismi di scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.4.2 Il meccanismo di scheduling standard . . . . . . . . . . . . . . . . . . . . 76 3.4.3 Il meccanismo di scheduling real-time . . . . . . . . . . . . . . . . . . . . 79 3.4.4 Il controllo dello scheduler per i sistemi multiprocessore . . . . . . . . . . 83 3.4.5 Le priorit`a per le operazioni di I/O . . . . . . . . . . . . . . . . . . . . . . 85 3.5 Funzioni di gestione avanzata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.5.1 La system call clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.5.2 La funzione prctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 3.5.3 La funzione ptrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.5.4 L’accesso alle porte di I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.6 Problematiche di programmazione multitasking . . . . . . . . . . . . . . . . . . . 94 3.6.1 Le operazioni atomiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 3.6.2 Le race condition ed i deadlock . . . . . . . . . . . . . . . . . . . . . . . . 95 3.6.3 Le funzioni rientranti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4 L’architettura dei file 97 4.1 L’architettura generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.1.1 L’organizzazione di file e directory . . . . . . . . . . . . . . . . . . . . . . 97 4.1.2 I tipi di file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.1.3 Le due interfacce ai file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2 L’architettura della gestione dei file . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.2.1 Il Virtual File System di Linux . . . . . . . . . . . . . . . . . . . . . . . . 100 4.2.2 Il funzionamento del Virtual File System . . . . . . . . . . . . . . . . . . 102 4.2.3 Il funzionamento di un filesystem Unix . . . . . . . . . . . . . . . . . . . . 103 4.2.4 I filesystem di uso comune . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 INDICE v 5 File e directory 109 5.1 La gestione di file e directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.1.1 Le funzioni link e unlink . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.1.2 Le funzioni remove e rename . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.1.3 I link simbolici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.1.4 La creazione e la cancellazione delle directory . . . . . . . . . . . . . . . . 116 5.1.5 La creazione di file speciali . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.1.6 Accesso alle directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.1.7 La directory di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.1.8 I file temporanei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 5.2 La manipolazione delle caratteristiche dei file . . . . . . . . . . . . . . . . . . . . 129 5.2.1 La lettura delle caratteristiche dei file . . . . . . . . . . . . . . . . . . . . 130 5.2.2 I tipi di file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.2.3 Le dimensioni dei file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 5.2.4 I tempi dei file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.3 Il controllo di accesso ai file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.3.1 I permessi per l’accesso ai file . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.3.2 I bit dei permessi speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 5.3.3 Le funzioni per la gestione dei permessi dei file . . . . . . . . . . . . . . . 141 5.3.4 La gestione della titolarit`a dei file . . . . . . . . . . . . . . . . . . . . . . 144 5.3.5 Un quadro d’insieme sui permessi . . . . . . . . . . . . . . . . . . . . . . . 145 5.4 Caratteristiche e funzionalit`a avanzate . . . . . . . . . . . . . . . . . . . . . . . . 146 5.4.1 Gli attributi estesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.4.2 Le Access Control List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 5.4.3 La gestione delle quote disco . . . . . . . . . . . . . . . . . . . . . . . . . 160 5.4.4 La gestione delle capabilities . . . . . . . . . . . . . . . . . . . . . . . . . 165 5.4.5 La funzione chroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6 I file: l’interfaccia standard Unix 181 6.1 L’architettura di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 6.1.1 L’architettura dei file descriptor . . . . . . . . . . . . . . . . . . . . . . . 181 6.1.2 I file standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 6.2 Le funzioni base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.2.1 La funzione open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 6.2.2 La funzione close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 6.2.3 La funzione lseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 6.2.4 Le funzioni read e pread . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 6.2.5 Le funzioni write e pwrite . . . . . . . . . . . . . . . . . . . . . . . . . . 189 6.3 Caratteristiche avanzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 6.3.1 La condivisione dei files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 6.3.2 Operazioni atomiche con i file . . . . . . . . . . . . . . . . . . . . . . . . . 191 6.3.3 Le funzioni sync e fsync . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 6.3.4 Le funzioni dup e dup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 6.3.5 Le funzioni openat, mkdirat e affini . . . . . . . . . . . . . . . . . . . . . 195 6.3.6 La funzione fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 6.3.7 La funzione ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 vi INDICE 7 I file: l’interfaccia standard ANSI C 203 7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 7.1.1 I file stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 7.1.2 Gli oggetti FILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 7.1.3 Gli stream standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 7.1.4 Le modalit`a di bufferizzazione . . . . . . . . . . . . . . . . . . . . . . . . . 204 7.2 Funzioni base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 7.2.1 Apertura e chiusura di uno stream . . . . . . . . . . . . . . . . . . . . . . 206 7.2.2 Lettura e scrittura su uno stream . . . . . . . . . . . . . . . . . . . . . . . 208 7.2.3 Input/output binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 7.2.4 Input/output a caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 7.2.5 Input/output di linea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 7.2.6 L’input/output formattato . . . . . . . . . . . . . . . . . . . . . . . . . . 214 7.2.7 Posizionamento su uno stream . . . . . . . . . . . . . . . . . . . . . . . . 218 7.3 Funzioni avanzate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 7.3.1 Le funzioni di controllo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 7.3.2 Il controllo della bufferizzazione . . . . . . . . . . . . . . . . . . . . . . . . 220 7.3.3 Gli stream e i thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 8 La gestione del sistema, del tempo e degli errori 225 8.1 Capacit`a e caratteristiche del sistema . . . . . . . . . . . . . . . . . . . . . . . . . 225 8.1.1 Limiti e parametri di sistema . . . . . . . . . . . . . . . . . . . . . . . . . 225 8.1.2 La funzione sysconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 8.1.3 I limiti dei file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 8.1.4 La funzione pathconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.1.5 La funzione uname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.2 Opzioni e configurazione del sistema . . . . . . . . . . . . . . . . . . . . . . . . . 231 8.2.1 La funzione sysctl ed il filesystem /proc . . . . . . . . . . . . . . . . . . 231 8.2.2 La gestione delle propriet`a dei filesystem . . . . . . . . . . . . . . . . . . . 233 8.2.3 La gestione delle informazioni su utenti e gruppi . . . . . . . . . . . . . . 236 8.2.4 Il registro della contabilit`a degli utenti . . . . . . . . . . . . . . . . . . . . 239 8.3 Il controllo dell’uso delle risorse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 8.3.1 L’uso delle risorse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 8.3.2 Limiti sulle risorse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 8.3.3 Le risorse di memoria e processore . . . . . . . . . . . . . . . . . . . . . . 244 8.3.4 La contabilit`a in stile BSD . . . . . . . . . . . . . . . . . . . . . . . . . . 246 8.4 La gestione dei tempi del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 8.4.1 La misura del tempo in Unix . . . . . . . . . . . . . . . . . . . . . . . . . 247 8.4.2 La gestione del process time . . . . . . . . . . . . . . . . . . . . . . . . . . 248 8.4.3 Le funzioni per il calendar time . . . . . . . . . . . . . . . . . . . . . . . . 249 8.4.4 La gestione delle date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 8.5 La gestione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 8.5.1 La variabile errno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 8.5.2 Le funzioni strerror e perror . . . . . . . . . . . . . . . . . . . . . . . . 255 8.5.3 Alcune estensioni GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 9 I segnali 259 9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 9.1.1 I concetti base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 9.1.2 Le semantiche del funzionamento dei segnali . . . . . . . . . . . . . . . . 260 9.1.3 Tipi di segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 INDICE vii 9.1.4 La notifica dei segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 9.2 La classificazione dei segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 9.2.1 I segnali standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 9.2.2 Segnali di errore di programma . . . . . . . . . . . . . . . . . . . . . . . . 263 9.2.3 I segnali di terminazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 9.2.4 I segnali di allarme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 9.2.5 I segnali di I/O asincrono . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 9.2.6 I segnali per il controllo di sessione . . . . . . . . . . . . . . . . . . . . . . 267 9.2.7 I segnali di operazioni errate . . . . . . . . . . . . . . . . . . . . . . . . . 267 9.2.8 Ulteriori segnali. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 9.2.9 Le funzioni strsignal e psignal . . . . . . . . . . . . . . . . . . . . . . . 268 9.3 La gestione di base dei segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 9.3.1 Il comportamento generale del sistema . . . . . . . . . . . . . . . . . . . . 269 9.3.2 La funzione signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 9.3.3 Le funzioni kill e raise . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 9.3.4 Le funzioni alarm, abort ed i timer . . . . . . . . . . . . . . . . . . . . . 273 9.3.5 Le funzioni di pausa e attesa . . . . . . . . . . . . . . . . . . . . . . . . . 276 9.3.6 Un esempio elementare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 9.4 La gestione avanzata dei segnali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 9.4.1 Alcune problematiche aperte . . . . . . . . . . . . . . . . . . . . . . . . . 279 9.4.2 Gli insiemi di segnali o signal set . . . . . . . . . . . . . . . . . . . . . . . 281 9.4.3 La funzione sigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 9.4.4 La gestione della maschera dei segnali o signal mask . . . . . . . . . . . . 287 9.4.5 Criteri di programmazione per i gestori dei segnali . . . . . . . . . . . . . 289 9.5 Funzionalit`a avanzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 9.5.1 I segnali real-time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 9.5.2 La gestione avanzata delle temporizzazioni . . . . . . . . . . . . . . . . . 294 9.5.3 Ulteriori funzioni di gestione . . . . . . . . . . . . . . . . . . . . . . . . . 301 10 Interfaccia utente: terminali e sessioni di lavoro 305 10.1 L’interazione con i terminali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.1.1 Il job control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 10.1.2 I process group e le sessioni . . . . . . . . . . . . . . . . . . . . . . . . . . 306 10.1.3 Il terminale di controllo e il controllo di sessione . . . . . . . . . . . . . . 309 10.1.4 Dal login alla shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 10.1.5 Interazione senza terminale: i demoni ed il syslog . . . . . . . . . . . . . . 313 10.2 L’I/O su terminale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 10.2.1 L’architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 10.2.2 La gestione delle caratteristiche di un terminale . . . . . . . . . . . . . . . 321 10.2.3 La gestione della disciplina di linea. . . . . . . . . . . . . . . . . . . . . . 332 10.2.4 Operare in modo non canonico . . . . . . . . . . . . . . . . . . . . . . . . 333 10.3 La gestione dei terminali virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 10.3.1 I terminali virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 10.3.2 Allocazione dei terminali virtuali . . . . . . . . . . . . . . . . . . . . . . . 334 11 L’intercomunicazione fra processi 335 11.1 L’intercomunicazione fra processi tradizionale . . . . . . . . . . . . . . . . . . . . 335 11.1.1 Le pipe standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 11.1.2 Un esempio dell’uso delle pipe . . . . . . . . . . . . . . . . . . . . . . . . 337 11.1.3 Le funzioni popen e pclose . . . . . . . . . . . . . . . . . . . . . . . . . . 339 11.1.4 Le pipe con nome, o fifo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 viii INDICE 11.1.5 La funzione socketpair . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 11.2 L’intercomunicazione fra processi di System V . . . . . . . . . . . . . . . . . . . . 348 11.2.1 Considerazioni generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 11.2.2 Il controllo di accesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 11.2.3 Gli identificatori ed il loro utilizzo . . . . . . . . . . . . . . . . . . . . . . 351 11.2.4 Code di messaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 11.2.5 Semafori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 11.2.6 Memoria condivisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 11.3 Tecniche alternative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 11.3.1 Alternative alle code di messaggi . . . . . . . . . . . . . . . . . . . . . . . 383 11.3.2 I file di lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 11.3.3 La sincronizzazione con il file locking . . . . . . . . . . . . . . . . . . . . . 385 11.3.4 Il memory mapping anonimo . . . . . . . . . . . . . . . . . . . . . . . . . 387 11.4 L’intercomunicazione fra processi di POSIX . . . . . . . . . . . . . . . . . . . . . 387 11.4.1 Considerazioni generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 11.4.2 Code di messaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 11.4.3 Memoria condivisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 11.4.4 Semafori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 12 La gestione avanzata dei file 407 12.1 Il file locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 12.1.1 L’advisory locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 12.1.2 La funzione flock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 12.1.3 Il file locking POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 12.1.4 La funzione lockf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 12.1.5 Il mandatory locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 12.2 L’I/O multiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 12.2.1 La problematica dell’I/O multiplexing . . . . . . . . . . . . . . . . . . . . 419 12.2.2 Le funzioni select e pselect . . . . . . . . . . . . . . . . . . . . . . . . . 420 12.2.3 Le funzioni poll e ppoll . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 12.2.4 L’interfaccia di epoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 12.2.5 La notifica di eventi tramite file descriptor . . . . . . . . . . . . . . . . . . 431 12.3 L’accesso asincrono ai file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 12.3.1 Il Signal driven I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 12.3.2 I meccanismi di notifica asincrona. . . . . . . . . . . . . . . . . . . . . . . 441 12.3.3 L’interfaccia POSIX per l’I/O asincrono . . . . . . . . . . . . . . . . . . . 451 12.4 Altre modalit`a di I/O avanzato . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 12.4.1 File mappati in memoria. . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 12.4.2 I/O vettorizzato: readv e writev . . . . . . . . . . . . . . . . . . . . . . . 464 12.4.3 L’I/O diretto fra file descriptor: sendfile e splice . . . . . . . . . . . . 466 12.4.4 Gestione avanzata dell’accesso ai dati dei file . . . . . . . . . . . . . . . . 475 13 I thread 479 13.1 Introduzione ai thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.1.1 Una panoramica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.1.2 I thread e Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.1.3 Implementazioni alternative . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.2 Posix thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.2.1 Una panoramica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 13.2.2 La gestione dei thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 13.2.3 I mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 INDICE ix 13.2.4 Le variabili di condizione . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 II Programmazione di rete 481 14 Introduzione alla programmazione di rete 483 14.1 Modelli di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 14.1.1 Il modello client-server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 14.1.2 Il modello peer-to-peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 14.1.3 Il modello three-tier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 14.2 I protocolli di rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 14.2.1 Il modello ISO/OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 14.2.2 Il modello TCP/IP (o DoD) . . . . . . . . . . . . . . . . . . . . . . . . . . 486 14.2.3 Criteri generali dell’architettura del TCP/IP . . . . . . . . . . . . . . . . 488 14.3 Il protocollo TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 14.3.1 Il quadro generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 14.3.2 Internet Protocol (IP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 14.3.3 User Datagram Protocol (UDP) . . . . . . . . . . . . . . . . . . . . . . . 492 14.3.4 Transport Control Protocol (TCP) . . . . . . . . . . . . . . . . . . . . . . 492 14.3.5 Limiti e dimensioni riguardanti la trasmissione dei dati . . . . . . . . . . 493 15 Introduzione ai socket 497 15.1 Una panoramica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 15.1.1 I socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 15.1.2 Concetti base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 15.2 La creazione di un socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 15.2.1 La funzione socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 15.2.2 Il dominio dei socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 15.2.3 Il tipo di socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 15.3 Le strutture degli indirizzi dei socket . . . . . . . . . . . . . . . . . . . . . . . . . 501 15.3.1 La struttura generica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 15.3.2 La struttura degli indirizzi IPv4 . . . . . . . . . . . . . . . . . . . . . . . 502 15.3.3 La struttura degli indirizzi IPv6 . . . . . . . . . . . . . . . . . . . . . . . 503 15.3.4 La struttura degli indirizzi locali . . . . . . . . . . . . . . . . . . . . . . . 504 15.3.5 La struttura degli indirizzi AppleTalk . . . . . . . . . . . . . . . . . . . . 504 15.3.6 La struttura degli indirizzi dei packet socket . . . . . . . . . . . . . . . . . 505 15.4 Le funzioni di conversione degli indirizzi . . . . . . . . . . . . . . . . . . . . . . . 506 15.4.1 Le funzioni per il riordinamento . . . . . . . . . . . . . . . . . . . . . . . 506 15.4.2 Le funzioni inet_aton, inet_addr e inet_ntoa . . . . . . . . . . . . . . 507 15.4.3 Le funzioni inet_pton e inet_ntop . . . . . . . . . . . . . . . . . . . . . 508 16 I socket TCP 509 16.1 Il funzionamento di una connessione TCP . . . . . . . . . . . . . . . . . . . . . . 509 16.1.1 La creazione della connessione: il three way handshake . . . . . . . . . . . 509 16.1.2 Le opzioni TCP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 16.1.3 La terminazione della connessione . . . . . . . . . . . . . . . . . . . . . . 511 16.1.4 Un esempio di connessione. . . . . . . . . . . . . . . . . . . . . . . . . . . 512 16.1.5 Lo stato TIME_WAIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 16.1.6 I numeri di porta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 16.1.7 Le porte ed il modello client/server . . . . . . . . . . . . . . . . . . . . . . 517 16.2 Le funzioni di base per la gestione dei socket . . . . . . . . . . . . . . . . . . . . 518 x INDICE 16.2.1 La funzione bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 16.2.2 La funzione connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 16.2.3 La funzione listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 16.2.4 La funzione accept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 16.2.5 Le funzioni getsockname e getpeername. . . . . . . . . . . . . . . . . . . 524 16.2.6 La funzione close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 16.3 Un esempio elementare: il servizio daytime . . . . . . . . . . . . . . . . . . . . . . 526 16.3.1 Il comportamento delle funzioni di I/O. . . . . . . . . . . . . . . . . . . . 526 16.3.2 Il client daytime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 16.3.3 Un server daytime iterativo . . . . . . . . . . . . . . . . . . . . . . . . . . 530 16.3.4 Un server daytime concorrente . . . . . . . . . . . . . . . . . . . . . . . . 532 16.4 Un esempio piu` completo: il servizio echo . . . . . . . . . . . . . . . . . . . . . . 534 16.4.1 Il servizio echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 16.4.2 Il client echo: prima versione . . . . . . . . . . . . . . . . . . . . . . . . . 535 16.4.3 Il server echo: prima versione . . . . . . . . . . . . . . . . . . . . . . . . . 536 16.4.4 L’avvio e il funzionamento normale . . . . . . . . . . . . . . . . . . . . . . 539 16.4.5 La conclusione normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 16.4.6 La gestione dei processi figli . . . . . . . . . . . . . . . . . . . . . . . . . . 541 16.5 I vari scenari critici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 16.5.1 La terminazione precoce della connessione . . . . . . . . . . . . . . . . . . 545 16.5.2 La terminazione precoce del server . . . . . . . . . . . . . . . . . . . . . . 546 16.5.3 Altri scenari di terminazione della connessione . . . . . . . . . . . . . . . 550 16.6 L’uso dell’I/O multiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 16.6.1 Il comportamento della funzione select con i socket. . . . . . . . . . . . 553 16.6.2 Un esempio di I/O multiplexing . . . . . . . . . . . . . . . . . . . . . . . 554 16.6.3 La funzione shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 16.6.4 Un server basato sull’I/O multiplexing . . . . . . . . . . . . . . . . . . . . 561 16.6.5 I/O multiplexing con poll . . . . . . . . . . . . . . . . . . . . . . . . . . 564 16.6.6 I/O multiplexing con epoll . . . . . . . . . . . . . . . . . . . . . . . . . . 567 17 La gestione dei socket 569 17.1 La risoluzione dei nomi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 17.1.1 La struttura del resolver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 17.1.2 Le funzioni di interrogazione del resolver . . . . . . . . . . . . . . . . . . 571 17.1.3 La risoluzione dei nomi a dominio . . . . . . . . . . . . . . . . . . . . . . 577 17.1.4 Le funzioni avanzate per la risoluzione dei nomi . . . . . . . . . . . . . . . 584 17.2 Le opzioni dei socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 17.2.1 Le funzioni setsockopt e getsockopt . . . . . . . . . . . . . . . . . . . . 595 17.2.2 Le opzioni generiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 17.2.3 L’uso delle principali opzioni dei socket . . . . . . . . . . . . . . . . . . . 601 17.2.4 Le opzioni per il protocollo IPv4 . . . . . . . . . . . . . . . . . . . . . . . 607 17.2.5 Le opzioni per i protocolli TCP e UDP . . . . . . . . . . . . . . . . . . . 611 17.3 La gestione attraverso le funzioni di controllo . . . . . . . . . . . . . . . . . . . . 618 17.3.1 L’uso di ioctl e fcntl per i socket generici . . . . . . . . . . . . . . . . . 618 17.3.2 L’uso di ioctl per l’accesso ai dispositivi di rete . . . . . . . . . . . . . . 619 17.3.3 L’uso di ioctl per i socket TCP e UDP . . . . . . . . . . . . . . . . . . . 624 17.4 La gestione con sysctl ed il filesystem /proc . . . . . . . . . . . . . . . . . . . . 624 17.4.1 L’uso di sysctl e /proc per le propriet`a della rete . . . . . . . . . . . . . 625 17.4.2 I valori di controllo per i socket generici . . . . . . . . . . . . . . . . . . . 625 17.4.3 I valori di controllo per il protocollo IPv4 . . . . . . . . . . . . . . . . . . 627

Description:
specifico argomento in esame (ed in particolare lo GNU C Library Reference Manual non brilla filosofico. Il testo sar`a, almeno inizialmente, in italiano. Per il momento lo si `e suddiviso in due parti, la prima sulla programmazione di sistema, in cui si trattano le varie funzionalit`a disponibili
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.