1 <?xml version="1.0" encoding="iso-8859-1"?>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
4 "DTD/xhtml1-strict.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="it">
8 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9 <title>GaPiL -- Guida alla Programmazione in Linux</title>
10 <meta name="author" content="Simone Piccardi" />
11 <meta name="title" content="Guida alla Programmazione in Linux" />
12 <meta name="description" content="Un manuale di programmazione avanzata in
14 <meta name="keywords" content="programmazione, programmazione linux,
15 POSIX, programmazione avanzata "/>
16 <style type="text/css">
18 a {text-decoration: none;}
19 td {font-family: sans-serif}
23 <body link="mediumslateblue" vlink="mediumblue" alink="red" bgcolor="white">
25 <table cellspacing="0" cellpadding="0" border="0" width="800">
28 <td width="170" align="center">
29 <img src="gapil.png" width="160" border="0" />
31 <td valign="bottom" align="left" bgcolor="white">
32 <table cellspacing="0">
35 <font face="sans-serif" size="+4"
36 color="darkred" style="font-size: 22pt">
37 <b>Guida alla Programmazione in Linux</b>
39 <font color="midnightblue">
40 <b>Simone Piccardi</b>
51 <table width="790" cellspacing="0" cellpadding="3" border="0">
54 <td width="164" align="center" >
56 <td align="center" bgcolor="#dddddd">
57 <a target="_parent" href="index.html">
58 <font face="sans-serif">
63 <td align="center" bgcolor="#dddddd">
64 <a target="_parent" href="stampa.html">
65 <font face="sans-serif">
70 <td align="center" bgcolor="#dddddd">
72 href="http://www.lilik.it/~mirko/gapil/gapil.html">
73 <font face="sans-serif" color="darkred">
74 <b>Versione online</b>
78 <td align="center" bgcolor="#dddddd">
80 href="http://cvs.firenze.linux.it/cgi-bin/viewcvs.cgi/gapil/?cvsroot=Misc">
81 <font face="sans-serif">
91 <table width="800" cellspacing="10" cellpadding="10" border="0">
94 <td width="130" valign="top"><b>
95 <font color="#0000aa">
100 <td bgcolor="lightblue">
102 <b>GaPiL</b> nasce dalla mia convinzione profonda che la <a
103 href="http://www.gnu.org/philosophy/philosophy.it.html">
104 "filosofia"</a> che ispira il software libero si applichi anche
105 ad altri campi che non siano necessariamente quelli della
106 scrittura di programmi per computer. In particolare ritengo che
107 possa assumere una grande rilevanza in ambiti come quelli
108 dell'educazione e della formazione.
110 <p> Ma se trovare della buona documentazione libera, specie per
111 quanto riguarda i programmi che girano sul sistema GNU/Linux,
112 è ormai relativamente facile, la produzione di buoni testi
113 didattici è ancora molto limitata, soprattutto se li si cercano
116 <p> <b>GaPiL</b> è un tentativo di scrivere un manuale di
117 programmazione di sistema in ambiente Linux, con una
118 particolare attenzione alle caratteristiche specifiche delle
119 interfacce fornite dal kernel. Benché buona parte della
120 trattazione delle funzioni di libreria faccia riferimento a
121 standard generali come POSIX, si è comunque data una
122 attenzione particolare alle GNU libc, che sono la versione più
123 usata delle librerie del C, senza dimenticare, ove note, di
124 citare le differenze con possibili alternative come le libc5 o
128 L'obiettivo resta comunque quello di riuscire a produrre un
129 testo, rilasciato sotto <a
130 href="http://www.gnu.org/copyleft/fdl.html">GNU FDL</a>, che
131 possa servire a chi si accosta per la prima volta alla
132 programmazione avanzata e di sistema su un kernel Linux, con
133 la speranza di poter un giorno raggiungere la qualità dei
134 lavori del compianto R. W. Stevens.
139 <td width="130" valign="top">
141 <font color="#0000aa">
146 <td bgcolor="lightblue">
148 <b>GaPiL</b> nasce come libro e come tale la versione di
149 riferimento è quella in PDF, accessibile nella sezione <a
150 href="stampa.html"> <font face="sans-serif"> <b>Download</b>
151 </font></a>. Grazie all'opera di Mirko Maischberger abbiamo
152 anche una bellissima versione HTML, accessibile nella sezione <a
153 href="http://www.lilik.it/~mirko/gapil/gapil.html"> <font
154 face="sans-serif"> <b>online</b></font></a>, finalmente
155 all'altezza della versione stampabile.
159 <td width="130" valign="top">
161 <font color="#0000aa">
166 <td bgcolor="lightblue"> <b>GaPiL</b> è in continua evoluzione ma
167 alcune parti hanno raggiunto una "stabilità" sufficiente (nel
168 senso che le ho riviste, le ritengo abbastanza complete, e non
169 sono stato capace di accorgermi degli errori che ci ho lasciato)
170 altre sono da rivedere, altre sono solo parzialmente accennate. La
171 situazione attuale è la seguente:
172 <table width="600" cellspacing="5">
175 <td valign="top"> <b> Cap. 1 </b> </td>
176 <td valign="top"> Introduzione </td>
177 <td valign="top"> quasi completo e parzialmente revisionato
181 <td valign="top"> <b> Cap. 2-3 </b> </td>
182 <td valign="top"> Gestione dei processi </td>
183 <td valign="top"> quasi completi e parzialmente revisionati
187 <td valign="top"> <b> Cap. 4-7 </b> </td>
188 <td valign="top"> Gestione base dei file </td>
189 <td valign="top"> quasi completi e parzialmente revisionati
193 <td valign="top"> <b> Cap. 8 </b> </td>
194 <td valign="top"> Sistema, parametri, errori</td>
195 <td valign="top"> quasi completo, da revisionare</td>
198 <td valign="top"> <b> Cap. 9 </b> </td>
199 <td valign="top"> Segnali</td>
200 <td valign="top"> quasi completo, da revisionare </td>
203 <td valign="top"> <b> Cap. 10 </b> </td>
204 <td valign="top"> Sessioni e terminali</td>
205 <td valign="top"> sessioni complete, da revisionare,
206 terminali quasi completi. </td>
209 <td valign="top"> <b> Cap. 11 </b> </td>
210 <td valign="top"> Gestione avanzata dei file</td>
212 I/O non bloccante, asincrono, memory
213 mapped completo, da revisionare, file locking
214 completo, da revisionare.
218 <td valign="top"> <b> Cap. 12 </b> </td>
219 <td valign="top"> IPC </td>
220 <td valign="top"> pipe, fifo e code, semafori,
221 memoria condivisa, tecniche alternative completi, da
222 revisionare, IPC POSIX quasi completo.
226 <td valign="top"> <b> Cap. 13 </b> </td>
227 <td valign="top"> Introduzione alla rete</td>
228 <td valign="top"> completo, da revisionare </td>
231 <td valign="top"> <b> Cap. 14 </b> </td>
232 <td valign="top"> I socket</td>
233 <td valign="top"> completo, da revisionare. Manca la
234 trattazione di eventuali ulteriori famiglie. </td>
237 <td valign="top"> <b> Cap. 15-16 </b> </td>
238 <td valign="top"> I socket TCP </td>
239 <td valign="top"> socket TCP elementari completo, da
240 revisionare. Socket TCP avanzati appena iniziato,
246 <td valign="top"> <b> Appendici </b> </td>
247 <td valign="top"> I protocolli, gli errori, ecc.</td>
248 <td valign="top"> Materiale messo insieme alla
249 rinfusa, e da rivedere da zero.
255 <b> Versione corrente:</b> 499 pagine.
260 <td width="130" valign="top">
262 <font color="#0000aa">
267 <td bgcolor="lightblue">
269 <b>26 - dicembre - 2003</b> <br/> Inserito esempio di server
270 basato sull'I/O multiplexing. Ristrutturato il capitolo sui file
271 avanzati scorporando in una sezione a parte l'I/O multiplexing,
272 e inserendo alcuni esempi per <b>pselect</b>. Creata una terza
273 parte per le appendici.
275 <b>8 - novembre - 2003</b> <br/> Corretta tabella sbagliata al
276 capitolo 5, completata la sezione sull'uso dell'I/O multiplexing
277 sul lato client ed iniziata la versione server, inserita la
278 trattazione della funzione shutdown.
281 <b>21 - settembre - 2003</b> <br/> Completato il capitolo sui
282 socket elementari, e corretti numerosi errori. Revisione della
283 sezione sull'I/O multiplexing nel capitolo sui file avanzati in
284 vista dell'uso nel capitolo sui socket TCP avanzati.
287 <b>6 - aprile - 2003</b> <br/> Grazie all'incredibile lavoro di
288 Mirko Maischberger abbiamo una favolosa versione in HTML, che
289 collego direttamente dalla sua home page. Non finirò mai di
290 ringraziarlo per aver domato htlatex fino a produrre la prima
291 versione di GaPiL realmente consuntabile on line. Con
292 l'occasione è stata completamente revisionata la parte di
293 introduzione alle reti.
296 <b>10 - marzo - 2003</b> <br/> Completata la memoria condivisa
297 POSIX, introdotte le relative funzioni di interfaccia,
298 revisionati ed ampliati i capitoli sull'introduzione alla rete
302 <b>20 - febbraio - 2003</b> <br/> Completata la sezione sulle
303 alternative al SysV IPC, introdotte le code di messaggi POSIX,
304 un esempio di uso della memoria condivisa, e parecchie revisioni
308 <b>10 - dicembre - 2002</b> <br/> Completata la sezione sul file
309 locking, inserita una nuova sezione sulle alternative al SysV
310 IPC, estesa la parte sulla memoria condivisa, fatta una
311 revisione generale degli indici.
314 <b>26 - ottobre - 2002</b> <br/> Revisione di terminali, code di
315 messaggi e advisory file locking. Aggiunta la struttura dei
316 semafori SysV IPC, del file locking in stile POSIX, ed un
317 contributo di Daniele Masini sull'allocazione della memoria.
320 <b>18 - ottobre - 2002</b> <br/> Aggiunte: trattazione elementare
321 dei terminali, dei semafori di System V IPC, del file locking in
325 <b>24 - settembre - 2002</b> <br/> Spostato tutto sul CVS
326 pubblico del FLUG che consente l'accesso anonimo. Aggiunta una
327 trattazione preliminare delle code di messaggi di System V IPC e
328 del controllo di sessione.
331 <b>20 - agosto - 2002</b> <br/> Completata la stesura preliminare
332 del memory mapped I/O, inserito un esempio di server basato
333 sulle FIFO, completata la versione iniziale dell'introduzione
337 <b>7 - agosto - 2002</b> <br/> Completata la prima stesura delle
338 sezioni relative all'I/O asincrono ed ai segnali real-time,
339 iniziata la stesura della sezione sul memory mapped I/O.
342 <b>22 - luglio - 2002</b> <br/> Iniziata la stesura del capitolo
343 sull'I/O avanzato. Completata la sezione su pipe e FIFO (in
344 versione preliminare) inziate le sezioni su I/O asincrono ed una
345 sezione aggiuntiva sui segnali real-time nel relativo capitolo.
348 <b>3 - luglio - 2002</b> <br/> Prima versione del sito, con
349 rilascio della prima versione di GaPiL in un HTML passabile.
351 Sono in versione preliminare, ma ricontrollati e di qualità
352 accettabile, i capitoli dal primo al nono: introduzione,
353 gestione dei processi, interfacce di base per i file e per il
354 controllo dei parametri del sistema, gestione dei segnali. Sono
355 da ricontrollare, ma di qualità decente, i capitoli dal
356 tredicesimo al sedicesimo: reti e socket elementari (il
357 sedicesimo capitolo è incompleto). Sono in corso di stesura, e
358 pertanto di qualità non classificabile (che può oscillare fra la
359 bozza non rivista ed il semplice elenco degli argomenti) gli