Laboratorio di Sistemi Operativi

Documenti analoghi
Capitolo 3 -- Stevens

Laboratorio di Sistemi Operativi primavera 2009 open

Per operare su un file abbiamo bisogno di aprirlo, scriverlo, leggerlo, chiuderlo:

1. Standard input 2. Standard output 3. Standard error

File I/O. M. R. Guarracino: File I/O 1

Laboratorio di Sistemi Operativi

Files, File I/O. Franco Maria Nardini

Input-Output di basso livello

Digressione: man 2...

System call per l accesso a file

Files, File I/O, File Sharing. Franco Maria Nardini

Il File-System. I file in ambiente Linux Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 16 Input/Output

Esercitazione di Lab. di Sistemi Operativi. - I/0 di basso livello

Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:

Programmazione di sistema in Linux: gestione dei file. E. Mumolo

Esercitazione di Lab. di Sistemi Operativi 1 a.a. 2011/2012

La gestione dell'errore

Esercitazione 4. Gestione dei file in Unix

Corso di Laboratorio di Sistemi Operativi A.A

System calls. permettono ai programmi utente di richiedere servizi al Sistema Operativo. servizi come scrittura di file, stampa su video, ecc.

Capitolo 5 -- Stevens

Digressione: man (2)...

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3

&& (nessun altro processo ha il file aperto) && (il fd e chiuso) Cancella il file;

Modulo 13: System call relative al File System

SISTEMI OPERATIVI. Linguaggio C e Linux. Diffusione dei linguaggi di programmazione IEEE Giorgio Giacinto 2016.

Il linguaggio C. Breve panoramica su stdio.h

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

Inter-process communication

Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:

Corso di Sistemi Operativi A.A CHIAMATE DI SISTEMA PER FILE E SEMAFORI. Fabio Buttussi

Inter-process communication

Igino Corona

Chiamate di sistema. Pipe Flussi di I/O

Chiamate di sistema. Pipe Flus s i di I/O

Laboratorio di Sistemi Operativi primavera 2009

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Corso di Reti di Calcolatori T

Comandi. Sistema Operativo

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Sistemi Operativi. II Semestre - Marzo/Giugno 2012 Matricole congr. 0 mod 3. File & Directory

Il sistema operativo LINUX Il file system. Indice. Blocchi logici. Indice. Super block. G. Di Natale, S. Di Carlo

SC per Inter Process Comminication. Pipe senza nome e con nome (FIFO)

syscall n Utilizzate come interfaccia col sistema operativo, funzioni diverse (n = 0..5) Assunzioni importanti:

Sistemi Operativi (M. Cesati)

Sistemi Operativi. II Semestre - Marzo/Giugno 2011 Matricole congr. 0 mod 3. File & Directory. Leggere Directory

POSIX Systems Programming. geek evening 0x0d. ambienti POSIX. By lord_dex ZEI e Salug! presentano:

Scrivere alla fine di un file Vi sono due modi per scrivere alla fine di un file:

Il File System di Unix

Esercizi di Verifica Aprile 2005 Università disalerno

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matr. Congr. 0 mod 3

Programmazione di sistema in UNIX. Immagine di un processo in UNIX. Area dati. File comandi utente

Laboratorio di Sistemi Operativi

Directory. Le directory unix sono file.

SC per Inter Process Communication. Pipe senza nome e con nome (FIFO)

Input / Output. Come già detto, input e output sono realizzati in C da funzioni di stdio.h all'interno della libreria standard

Sistemi Operativi (M. Cesati)

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 matricole congrue 0 mod 3

Chiamate di sistema. Gestione sistematica di errori Chiamate che lavorano su file

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI

Sistemi Operativi (M. Cesati)

Sistemi Operativi Teledidattico

Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Esercitazione [03] Sincronizzazione inter-processo

Esercitazione [3] Sincronizzazione inter-processo

UNIX file system: organizzazione logica. Il File System di UNIX. UNIX file system: organizzazione fisica

A.1 Programma di comunicazione su porta seriale

Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 9 File

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3

I files (archivi) Il C definisce in stdio.h tre file aperti automaticamente: stdin, stdout e stderr.! Sono ad accesso sequenziale diretto

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Laboratorio di Sistemi Operativi

Operazioni su file di caratteri

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Il File System di UNIX

I/O su Socket TCP: read()

Introduzione a MIPS64 (II parte)

Sistemi Operativi (M. Cesati)

Laboratorio di Sistemi Operativi primavera 2009

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Processore Danilo Dessì. Architettura degli Elaboratori.

Esercitazioni di Fondamenti di Informatica - Lez. 9 4/12/2018

Files in C endofile

Laboratorio reti AA 2007/2008. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Introduzione al C. Stream e disk file

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Laboratorio di Sistemi Operativi

Streams e disk files

Indice. La gestione dei file in C e gli stream. Apertura e chiusura di un file. Operazioni sui file. Accesso sequenziale e non sequenziale

Università degli Studi di Cagliari Corso di Laurea Specialistica in Ingegneria Elettronica. SISTEMI OPERATIVI A.A. 2004/2005 Docente: Giorgio Giacinto

Addendum alle chiamate di sistema per la gestione processi. E Mumolo

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3

Transcript:

II Semestre - Marzo/Giugno 2008 matricole congr. 0 mod 3 I/O non bufferizzato System Call open close read write lseek 2 1

file descriptor sono degli interi non negativi il kernel assegna un file descriptor ad ogni file aperto le funzioni di I/O identificano i file per mezzo dei fd nota la differenza con ANSI C fopen, fclose FILE *file_pointer 3 file descriptor...ancora per riferirsi ai file si comunica con il kernel tramite i file descriptor all'apertura/creazione di un file, il kernel restituisce un fd al processo da questo momento per ogni operazione su file usiamo il fd per riferirci ad esso 0 <= fd < OPEN_MAX limiti di OPEN_MAX 20 in vecchie versioni di UNIX 64 in versioni più recenti Limitato dalla quantità di memoria nel sistema (SVR4) 4 2

standard file Ogni nuovo processo apre 3 file standard input output error e vi si riferisce con i tre file descriptor 0 (STDIN_FILENO) 1 (STDOUT_FILENO) 2 (STDERR_FILENO) 5 open #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> In linux è <include/fcntl.h> int open(const char *pathname, int oflag, /*, mode_t mode */); Restituisce: un fd se OK fd restituito è il più piccolo numero non usato come fd 6 3

open L argomento oflag è formato dall OR di uno o più dei seguenti flag di stato (<include/fcntl.h>) Una ed una sola costante tra O_RDONLY, O_WRONLY, O_RDWR Zero o piu tra le seguenti (sono opzionali) O_APPEND = tutto ciò che verrà scritto sarà posto alla fine O_CREAT = usato quando si usa open per creare un file O_EXCL = messo in OR con O_CREAT per segnalare errore se il file già esiste O_TRUNC = se il file già esiste, aperto in write o read-write tronca la sua lunghezza a 0 O_SYNC (SVR4) = se si sta aprendo in write, fa completare prima I/O O_NOCTTY, O_NONBLOCK 7 open L argomento mode viene utilizzato quando si crea un nuovo file utilizzando O_CREAT per specificare i permessi di accesso del nuovo file che si sta creando. Se il file già esiste questo argomento è ignorato. 8 4

Pathname: Troncamento Se si cerca di creare un file con un nome troppo lungo (vedi: NAME_MAX) Il sistema potrebbe troncare il nome al massimo numero di byte disponibili O ritornare un errore e settare errno a ENAMETOOLONG L opzione NO_TRUNC fornisce indicazioni sul comportamento del sistema Valore con pathconf(char* pathname, _PC_NO_TRUNC) -1 indica che la funzione non e supportata 9 creat #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int creat( const char *pathname, mode_t mode ); Descrizione: crea un file dal nome pathname con i permessi descritti in mode Restituisce: fd del file aperto come write-only se OK, open(pathname, O_WRONLY O_CREAT O_TRUNC, mode); open(pathname, O_RDWR O_CREAT O_TRUNC, mode); 10 5

#include <unistd.h> close int close( int filedes ); Descrizione: chiude il file con file descriptor filedes Restituisce: 0 se OK Quando un processo termina, tutti i file aperti vengono automaticamente chiusi dal kernel 11 offset ogni file aperto ha assegnato un current offset (intero >0) che misura in numero di byte la posizione nel file in cui avverra la prossima operazione di scrittura o lettura Operazioni come open e creat settano il current offset all inizio del file a meno che O_APPEND è specificato (open) operazioni come read e write partono dal current offset e causano un incremento pari al numero di byte letti o scritti 12 6

lseek #include <sys/types.h> #include <unistd.h> off_t lseek( int filedes, off_t offset, int whence ); Restituisce: il nuovo offset se OK 13 lseek L argomento whence può assumere valore SEEK_SET ci si sposta del valore di offset a partire dall inizio SEEK_CUR ci si sposta del valore di offset (positivo o negativo) a partire dalla posizione corrente SEEK_END ci si sposta del valore di offset (positivo o negativo) a partire dalla fine (taglia) del file 14 7

lseek lseek permette di settare il current offset oltre la fine dei dati esistenti nel file. Se vengono inseriti successivamente dei dati in tale posizione, una lettura nel buco restituirà byte con valore 0 In ogni caso lseek non aumenta la taglia del file Se lseek fallisce (restituisce 1), il valore del current offset rimane inalterato 15 read #include <unistd.h> ssize_t read (int filedes, void *buff, size_t nbytes); Descrizione: legge dal file con file descriptor filedes un numero di byte nbyte e li mette in buff Restituisce: il numero di bytes letti, 0 se alla fine del file 16 8

read La lettura parte dal current offset Alla fine il current offset è incrementato del numero di byte letti Se nbytes=0 viene restituito 0 e non vi è altro effetto Se il current offset è alla fine del file o anche dopo, viene restituito 0 e non vi è alcuna lettura Se c è un buco (ci sono byte in cui non è stato scritto) nel file, vengono letti byte con valore 0 17 #include <unistd.h> write ssize_t write( int filedes, const void *buff, size_t nbytes); Descrizione: scrive nbyte presi dal buff sul file con file descriptor filedes Restituisce: il numero di bytes scritti se OK 18 9

write La posizione da cui si comincia a scrivere è current offset Alla fine della scrittura current offset è incrementato di nbytes e se tale scrittura ha causato un aumento della lunghezza del file anche tale parametro viene aggiornato Se viene richiesto di scrivere più byte rispetto allo spazio a disposizione (es: limite fisico di un dispositivo di output), solo lo spazio disponibile è occupato e viene restituito il numero effettivo di byte scritti (<=nbytes) Se filedes è stato aperto con O_APPEND allora current offset è settato alla fine del file in ogni operazione di write Se nbytes=0 viene restituito 0 e non vi è alcuna scrittura 19 /* File: seek.c */ #include <sys/types.h> /* per off_t() */ #include <fcntl.h> /* per open() */ #include <unistd.h> /* per lseek() */ /* necessita #include di stdio.h and stdlib.h */ int main(void) { off_t i; int fd; char *s; } fd=open("seek.c",o_rdonly); i=lseek(fd, 9, SEEK_CUR); printf("posizione corrente %d\n", (int)i); s=(char *) malloc(25*sizeof(char)); read (fd, s, 6); printf ("leggo da: \n %s\n", s); exit(0); 20 10

Vediamo ora come viene creato un file con un buco (lseek oltre la fine-file e poi write) -> vedi file: hole.c Per far stampare il contenuto del file col buco od c cat 21 #include <unistd.h> #include <stdio.h> #include <stdlib.h> #define BUFFSIZE 8192 int main(void) { int n; char bufbuffsize]; Efficienza di I/O } while((n = read(stdin_fileno,buf,buffsize))>0) if (write(stdout_fileno,buf, n)!= n) printf( \n ERROR: write error\n ); if (n < 0) printf( \n ERROR: read error\n ); exit(0); -apertura file standard -chiusura file - scelta di BUFFERSIZE 22 11