Il progetto

GaPiL nasce dalla mia convinzione profonda che la “filosofia” che ispira il software libero si applichi anche ad altri campi che non siano necessariamente quelli della scrittura di programmi per computer. In particolare ritengo che possa assumere una grande rilevanza in ambiti come quelli dell’educazione e della formazione.

Ma se trovare della buona documentazione libera, specie per quanto riguarda i programmi che girano sul sistema GNU/Linux, è ormai relativamente facile, la produzione di buoni testi didattici che insegnino a programmare in questo sistema è ancora molto limitata, soprattutto se li si cercano in lingua italiana.

GaPiL è un tentativo di scrivere un manuale di programmazione di sistema in ambiente di tipo Unix, con una particolare attenzione alle caratteristiche specifiche delle interfacce fornite dal kernel Linux. Per questo motivo si parla di Linux e non di GNU/Linux.

Nonostante questa specificità, essendo la gran parte delle funzioni di sistema standardizzate, la guida dovrebbe risultare utile anche facendo riferimenti ad altri sistemi di tipo Unix come i vari *BSD; in ogni caso si sono sottolineate esplicitamente le caratteristiche specifiche di Linux.

Benché buona parte della trattazione delle funzioni di libreria sia del tutto identica, facendo riferimento a standard generali come POSIX, si è comunque prestata particolare attenzione alle funzioni delle GNU libc, che sono la versione più usata delle librerie del C, senza dimenticare, ove note, di citare le differenze con possibili alternative come le libc5 o le uclibc.

L’obiettivo resta comunque quello di riuscire a produrre un testo, rilasciato sotto GNU FDL, che possa servire a chi si accosta per la prima volta alla programmazione avanzata e di sistema su un kernel Linux, con la speranza di poter un giorno raggiungere la qualità dei lavori del compianto R. W. Stevens.

Pubblicato Amministrare GNU/Linux

Gapil non è l’unico testo su cui ho lavorato in questi anni, con le attività di formazione e supporto fatte per conto di Truelite infatti ho dedicato molto tempo anche a creare della manualistica per la gestione sistemistica di sistemi GNU/Linux.

Il grosso del risultato di questo lavoro è nel testo “Amministrare GNU/Linux” che è giunto recentemente alla quinta edizione. Per quanto non direttamente collegato alla guida, mi pare comunque opportuno darne notizia, e rimandare per tutti i dettagli al sito di Truelite, alla pagina:

https://www.truelite.it/news/amministrare-gnu-linux-pubblicata-la-%20quinta-edizione/

Passaggio a git

Approfittando delle ferie estive si è provveduto ad effettuare il passaggio del sistema di gestione dei sorgenti della guida da Subversion a Git. Il vecchio repository Subversion rimane accessibile, ma non verrà più utilizzato ne aggiornato. I sorgenti della guida saranno da oggi disponibili su Git, e si potranno ottenere con il comando:

git clone https://gapil.gnulinux.it/git/gapil

La navigazione dei sorgenti viene fornita direttamente tramite gitweb alla voce di menu “Repository“.

Tags:

Revisione seconda parte

Procede molto lentamente la revisione della guida, che viste le dimensioni verrà divisa in due volumi, separando la seconda parte dedicata alla programmazione di rete. I primi capitoli della stessa (11, 12), di natura introduttiva, sono stati revisionati, con una breve aggiunta sul modello di programmazione “broadcast”, ed una revisione generale sulle funzioni trattate uniformando la notazione a quella usata nelle pagine di manuale per le costanti che indicano le famiglie di indirizzi ed introducendo le novità intervenute nei termini delle nuove famiglie di indirizzi e delle estensioni dell’argomento flag della funzione socket.

Revisione capitolo 9 (ex 10)

E’ stata completata la revisione del capitolo sulla gestione avanzata dei file, spostato a precedere quello sui sistemi di intercomunicazione fra processi già revisionato in precedenza. Con l’occasione si è passati all’uso nella maniera più estesa possibile del font libero inconsolata per tutti i caratteri non proporzionali del testo.

Relativamente alla revisione dei contenuti si è documentata correttamente la funzione lockf ed i problemi che rendono inaffidabile il mandatory locking. Sono state riviste e completate le parti su epoll e signalfd e documentata correttamente timerfd. E’ stato revisionata la sessione sull’AIO, aggiungendo materiale su aio_error e aoi_return. E’ stata revisionata la sezione sul memory mapping, documentando le più recenti opzioni di mmap, trattando madvise e posix_madvise. Si è revisionata la trattazione di splice e ampliata quella di fallocate.

Revisione nono/decimo capitolo.

E’ stata completata la revisione del precedente nono capitolo, dedicato ai meccanismi di intercomunicazione fra processi, che è diventato il decimo per lo spostamento a seguire di quello sulla gestione avanzata dei file (che è ancora da rivedere).

E’ stata aggiornata tutta la parte sulle pipe aggiungendo la funzione di sistema pipe2 e si è documentato l’uso del close-on-exec e della modalità non-bloccante sia per le pipe che per la funzione socketpair.

Si è migliorata l’introduzione al SysV-IPC, con degli esempi più precisi e la revisione dell’introduzione. E’ stata completamente revisionata la trattazione dell’IPC POSIX, aggiornando le varie funzioni dell’interfaccia alle versioni presenti nei kernel recenti, in particolare per quanto riguarda le code di messaggi ed i semafori.

Completa la revisione del capitolo 8

Grazie al ponte del 25 aprile ed al 1° maggio ho avuto un po’ di tempo per completare la revisione del capitolo 8 (nuovo numero dopo la revisione) dedicato a sessioni e terminali. Non ci sono aggiunte significative, ma solo un po’ di aggiornamenti e svecchiamenti, ed una serie di correzioni. Rispetto all’ultima edizione è comunque presente la documentazione del syslog e di klogctl (l’interfaccia per l’accesso al ring buffer di printk).

Nuovo settimo capitolo

La revisione del nuovo settimo capitolo dedicato ai segnali, (il precedente nono, prima degli accorpamenti) è stata completata.

E’ stata completamente rivista la classificazione dei segnali aggiornando i dati e correggendo alcune imprecisioni (alcune correzioni sono state inviate anche al manutentore delle man pages relative).

Si sono aggiornate le funzioni di gestione delle maschere dei segnali. Sono stati inseriti gli aggiornamenti relativi ai nuovi orologi Posix introdotti nei kernel più recenti. Si è aggiunta la trattazione di clock_nanosleep.

 

Nuovo sesto capitolo

La revisione del nuovo sesto capitolo (il precedente ottavo, prima degli accorpamenti) è stata completata. Dopo la rimozione della parte sulla gestione dei filesystem, spostata all’inizio del quarto capitolo, si è ristrutturato il resto dei contenuti. In particolare:

  • si è spostata la parte su sysctl e /proc nella prima sezione, dove era più in argomento. La trattazione della system call sysctl, ormai totalmente deprecata, è stata rimossa, e si è leggermente ampliata quella di /proc.
  • si è rivista la seconda sezione sul sistema in generale aggiungendo una sezione su spegnimento e riavvio, trattando reboot e kexec_load.
  • si è aggiornata la trattazione dei limiti sulle risorse inserendo le nuove risorse introdotte fino ai kernel correnti e la system call prlimit
  • si è rivista la trattazione dei tempi e le relative funzioni, accorpando i dati relativi a jiffies, HZ, clock tick, ecc.

Nuovo quinto capitolo, parte seconda

E’ stata completata la revisione della seconda parte del quinto capitolo, che tratta l’interfaccia ANSI C per i file (quella denominata dei file stream). Si tratta della parte accorpata alla trattazione base dei file descriptor che costituiva il precedente settimo capitolo.

Si sono riorganizzati gli argomenti con una migliore suddivisione dei paragrafi e dei titoli più appropriati, e si è fatta una revisione generale dei contenuti, ma non sono state effettuate aggiunte significative.

Nuovo quinto capitolo, parte prima

Nella revisione della guida si è deciso di accorpare i due capitoli in precedenza dedicati alle due interfacce di programmazione per l’accesso al contenuto dei file, quella dei file descriptor e quella degli stream, in un unico capitolo, il quinto, dedicato alla gestione del contenuto dei file in maniera generale.

Si sono ristrutturate le varie sezioni dedicando a ciascuna interfaccia due sezioni, di cui la prima volta ad illustrare architettura e funzioni di base, e la seconda volta ad illustrare le caratteristiche più avanzate di entrambe. Si è inoltre provveduto ad un aggiornamento dei contenuti, che è stato completato per quanto riguarda la prima parte, quella dedicata alla interfaccia nativa Unix dei file descriptor.

Si è revisionata la spiegazione sul significato dei file descriptor, si sono documentati in maniera dettagliata i flag di open, in particolare O_DIRECT e O_SYNC, si sono documentati i nuovi parametri SEEK_HOLE e SEEK_DATA di lseek, si sono accorpate le sezioni relative all’accesso concorrente dei processi ai file e documentati i dettagli non standard di dup2 e della nuova dup3. Si sono documentati meglio i comandi di fcntl ed aggiunti i nuovi comandi introdotti negli ultimi anni come F_GETOWN_EX, F_SETOWN_EX, F_SETPIPE_SZ e F_GETPIPE_SZ.

This work by Simone Piccardi is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported.