Sistemi operativi, A.A. 2011/2012 (M. Cesati) Scaletta esercitazione #7, 26.04.2012 1 Chiamate di sistema di base per l'accesso ai file 1.1 La chiamata di sistema open() +-------------------------------------------------------+ |int open(const char *pathname, int flags, mode_t mode);| +-------------------------------------------------------+ 1.1.1 Flag principali: O_RDONLY, O_WRONLY, O_RDWR 1.1.2 Flag secondari: O_CREAT, O_EXCL, O_TRUNC, O_APPEND 1.1.3 Diritti per nuovi file (mode): S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH 1.2 La chiamata di sistema close() +------------------+ |int close(int fd);| +------------------+ 1.3 La chiamata di sistema read() +----------------------------------------------+ |ssize_t read(int fd, void *buf, size_t count);| +----------------------------------------------+ 1.4 La chiamata di sistema write() +-----------------------------------------------------+ |ssize_t write(int fd, const void *buf, size_t count);| +-----------------------------------------------------+ 1.5 Differenza rispetto a funzioni di libreria operanti su FILE*: I/O non bufferizzato 2 Il descrittore di file 2.1 Descrittori per standard input (STDIN_FILENO, tipicamente 0), standard output (STDOUT_FILENO, tipicamente 1) e standard error (STDERR_FILENO, tipicamente 2) 2.2 Relazione tra FILE, descrittore di file, file aperto 2.2.1 La struttura FILE descrive un flusso stdio (per processo) 2.2.2 Il descrittore di file e' un indice in una tabella di sistema di file aperti 2.2.3 Un elemento nella tabella dei file aperti individua un file, la modalita' di apertura e la posizione corrente nel file 3 Esercizio: realizzare un programma che legge da riga comando tre argomenti: (1) il nome di un file di input, (2) il nome di un file di output, e (3) un numero naturale n. Si deve copiare il file di input nel file di output invertendo ciascun blocco di dimensione n [invertiblocco.c] ==========