Tutte le letture e gli esercizi che non siano esplicitamente marcati come "facoltativi" sono parte del programma di esame.
I lucidi che potete trovare in questa pagina non sono un sostituto per il libro di testo o per gli altri materiali che vi segnalo. I lucidi non contengono un discorso completo, ma solo una traccia, che è comprensibile soltanto nel contesto di quello che dico a lezione quando li proietto.
Lo scopo di rendervi disponibili le slide è di lasciarvi una traccia dei discorsi che abbiamo fatto a lezione. Per chi non era presente, l'unica utilità delle slide è come promemoria degli argomenti che sono stati trattati.
Insomma, ripeto: non limitate il vostro studio ai lucidi!
Il carattere alla posizione 0 è 'c' Il carattere alla posizione 1 è 'i' Il carattere alla posizione 2 è 'a' Il carattere alla posizione 3 è 'o'Lo pseudocodice del programma è
main(argc, argv) /* il nome del file è passato come argomento: si trova in argv[1] */ apri il file con open(2) trova la lunghezza del file con fstat(2) mappa il file in memoria con mmap(2) itera su tutti i caratteri del file
main(argc, argv) /* il nome del file di input è passato come argomento: si trova in argv[1] */ /* il nome del file di output è passato come argomento: si trova in argv[2] */ apri il file di input con open(2) crea il file di output con open(2) trova la lunghezza del file di input con fstat(2) estendi la lunghezza del file di output con ftruncate(2) per farla uguale al file di input mappa entrambi i file in memoria con mmap(2) copia l'input sull'output con memcpy(3) chiudi i due file
Scrivere un file che copia un file in un altro Pseudocodice apre il primo file (argv[1]) crea il secondo file (argv[2]) legge i primi 8Kb con read(2) copia i byte con write(2) chiude entrambi i file exit(0) Test: ./copia-con-read-write /etc/passwd /tmp/copia-di-passwd diff /etc/passwd /tmp/copia-di-passwd (se "diff" dice qualcosa vuol dire che i file non sono uguali) == Secondo livello== usare un ciclo per copiare a colpi di 8KB file di dimensioni arbitrarie. Test: n=0; while [ $n -lt 1000000 ]; do echo $n >> /tmp/bigfile; n=$(($n + 1)); done ./copia-con-read-write /tmp/bigfile /tmp/copia-di-bigfile diff /tmp/bigfile /tmp/copia-di-bigfile
== Primo livello == Scrivere un programma che accetta come argomento un nome di file e descrive i metadati del file, come da questo esempio: $ ./lista /etc/passwd Type Mode N.links Uid Gid Size Name file 0644 1 0 1 1932 /etc/passwd $ $ ./lista blablabla blablabla: No such file or directory == Secondo livello == Se il nome di file rappresenta una directory, listare il contenuto di essa $ ./lista /etc Type Mode N.links Uid Gid Size Name file 0644 1 0 1 1932 csh.login dir 0644 1 0 1 1932 cups file 0644 1 0 0 388 passwd file 0644 1 0 112 1234 profile == Terzo livello == Se viene passato l'argomento "-R", listare ricorsivamente le sottodirectory $ ./lista -R /etc directory /etc: Type Mode N.links Uid Gid Size Name file 0644 1 0 1 1932 csh.login dir 0644 1 0 1 1932 cups file 0644 1 0 0 388 passwd file 0644 1 0 112 1234 profile directory cups: Type Mode N.links Uid Gid Size Name file 0644 1 0 112 1234 printers.conf $