programma del corso
le parti tra parentesi quadre sono opzionali (l'inclusione o meno dipenderà dall'andamento del corso)
breve storia di Unix e C; breve storia di Linux, GNU Project, Linux Kernel; UNIX standards
concetti fondamentali
kernel, shell, users e groups, single directory hierarchy, directories, links, files;
programmi, processi, memory mapping, static and shared libraries, interprocess communication and synchronization
signals, threads, date and time, /proc file system
concetti di programmazione di sistema
system calls, library functions, the Standard C Library, the GNU C Library (glibc),
gestione degli errori restituiti dalle system calls e library functions
File I/O
"universalità" di I/O, aprile un file (open), leggere da un file (read), scrivere su un file (write), chiudere su un file (close),
cambiare l'offset di un file aperto (lseek), ioctl()
atomicità e race conditions, fcntl(), relazione tra descrittori di file e files aperti,
duplicare descrittori di files, [file I/O con offset specificato: pread pwrite],
troncare un file: truncate ftruncate,
I/O non bloccante, I/O su file "grandi",
directory /dev/fd, creare files temporanei e /tmp/,
Processi
processi, programmi, process ID e parent process ID,
"memory layout" di un processo,
virtual memory, stack, command line arguments, environment,
[non local goto: setjmp(), longjmp()],
allocazione di memoria
allocare memoria sulla heap, [modificare il "program break", brk() sbrk()],
malloc e free, allocare memoria sulla stack
utenti e gruppi
/etc/passwd, /etc/shadow, /etc/group, ottenere informazioni su user e group, password encryption
credenziali dei processi
real user ID e real group ID,
effective user ID ed effective group ID,
set user ID e set group ID,
file system user ID, file system group ID,
getuid() geteuid() getgid() getegid() ,
setuid() setgid(),
[*time*]
[*system limits*]
system and process information
file system /proc,
informazioni su un processo,
uname()
[*file I/O buffering]
*file systems*
device special files, file systems,
[I-nodes], the Virtual File System,
mounting and unmounting a file system,
tmpfs,
file attributes
file timestamp, file ownership,
file permission,
directories e links
directories e hard links, symbolic (soft) links, creare e rimuovere links,
rinominare un file,
creare e rimuovere directories, leggere directories,
monitoring file events
signals
timers and sleeping
process creation
fork(), exit(), wait(), execve()
process termination
exit(), _exit()
monitoring child processes
wait(), waitpid(),
orfani e zombies, [SIGCHLD]
program execution
execve()
threads
pthreads, thread creation, thread termination, thread id, join with thread,
threads syncronization
mutex, statically allocated mutex, locking and unlocking a mutex, mutex deadlock, dynamically initialize a mutex,
mutex types, condition variables,
process priorities
nice values,
daemons
syslog
[*shared libraries*]
interprocess communication overview
IPC facilities (pag. 877, Kerrisk)
pipes and fifos
[system V shared memory]
memory mappings
mmap, munmap, msync,
[*virtual memory operations*]
mlock
introduction to posix IPC
[*posix message queues*]
posix semaphores
posix shared memory
[*file locking*]
sockets
****
linguaggio C
introduzione
variabili ed espressioni aritmetiche, istruzione for,
costanti simboliche, I/O a caratteri, array, funzioni, argomenti passati per valore,
array di caratteri, variabili esterne e loro ambiti
tipi, operatori ed espressioni
nomi di variabili, tipi dati e loro dimensioni, costanti, dichiarazioni, operatori aritmetici,
operatori relazionali e logici, conversioni di tipo, operatori di incremento e decremento,
operatori bit a bit (bitwise), operatori di assegnazione, espressioni condizionali,
precedenza e ordine di valutazione
controllo del flusso di istruzioni
istruzioni e blocchi, if-else, else-if, switch, loops (cicli) while e for, break e continue, goto e label (etichetta)
funzioni e struttura del programma
funzioni che restituiscono non-interi, variabili esterne, regole di scopo, file di intestazione,
variabili statiche, struttura di un blocco, inizializzazione, preprocessore C
puntatori ed array (vettori)
puntatori ed indirizzi, puntatori e argomenti di funzione, puntatori ed array,
aritmetica di indirizzi, puntatori a carattere e funzioni, array di puntatori,
inizializzazione di array di puntatori, argomenti a lina di comando
strutture
basi delle strutture, strutture e funzioni, array di strutture, puntatori di strutture, riferimenti a strutture,
typedef, [union, bit-fields]
input/output
standard input e standard output, printf, scanf, stderr