Nelle prime versioni di Unix i valori di \param{flag} specificabili per
\func{open} erano solo quelli relativi alle modalità di accesso del file. Per
questo motivo per creare un nuovo file c'era una system call apposita,
Nelle prime versioni di Unix i valori di \param{flag} specificabili per
\func{open} erano solo quelli relativi alle modalità di accesso del file. Per
questo motivo per creare un nuovo file c'era una system call apposita,
\begin{prototype}{fcntl.h}
{int creat(const char *pathname, mode\_t mode)}
Crea un nuovo file vuoto, con i permessi specificati da \param{mode}. È del
\begin{prototype}{fcntl.h}
{int creat(const char *pathname, mode\_t mode)}
Crea un nuovo file vuoto, con i permessi specificati da \param{mode}. È del
descriptor ritorna disponibile; il suo prototipo è:
\begin{prototype}{unistd.h}{int close(int fd)}
Chiude il descrittore \param{fd}.
descriptor ritorna disponibile; il suo prototipo è:
\begin{prototype}{unistd.h}{int close(int fd)}
Chiude il descrittore \param{fd}.
In genere (a meno di non avere richiesto la modalità \const{O\_APPEND}) questa
posizione viene impostata a zero all'apertura del file. È possibile impostarla
In genere (a meno di non avere richiesto la modalità \const{O\_APPEND}) questa
posizione viene impostata a zero all'apertura del file. È possibile impostarla
aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
delle librerie la funzione non è disponibile.} (quello che viene chiamato
normalmente Unix98, vedi \secref{sec:intro_opengroup}) è stata introdotta la
aggiunto con la versione 2.1, in versioni precedenti sia del kernel che
delle librerie la funzione non è disponibile.} (quello che viene chiamato
normalmente Unix98, vedi \secref{sec:intro_opengroup}) è stata introdotta la
\begin{prototype}{unistd.h}
{ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
\begin{prototype}{unistd.h}
{ssize\_t pread(int fd, void * buf, size\_t count, off\_t offset)}
\begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
Scrive \param{count} byte dal buffer \param{buf} sul file \param{fd}.
\begin{prototype}{unistd.h}{ssize\_t write(int fd, void * buf, size\_t count)}
Scrive \param{count} byte dal buffer \param{buf} sul file \param{fd}.
indicato da \param{count}, a meno di un errore. Negli altri casi si ha lo
stesso comportamento di \func{read}.
indicato da \param{count}, a meno di un errore. Negli altri casi si ha lo
stesso comportamento di \func{read}.
per scrivere alla posizione indicata senza modificare la posizione corrente
nel file, il suo prototipo è:
\begin{prototype}{unistd.h}
per scrivere alla posizione indicata senza modificare la posizione corrente
nel file, il suo prototipo è:
\begin{prototype}{unistd.h}
questo dà la garanzia assoluta che i dati siano integri dopo la chiamata,
l'hardware dei dischi è in genere dotato di un suo meccanismo interno di
ottimizzazione per l'accesso al disco che può ritardare ulteriormente la
questo dà la garanzia assoluta che i dati siano integri dopo la chiamata,
l'hardware dei dischi è in genere dotato di un suo meccanismo interno di
ottimizzazione per l'accesso al disco che può ritardare ulteriormente la
Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere
sicuri che i dati di un database sono stati registrati su disco) si possono
Quando si vogliono scaricare soltanto i dati di un file (ad esempio essere
sicuri che i dati di un database sono stati registrati su disco) si possono
Abbiamo già visto in \secref{sec:file_sharing} come un processo figlio
condivida gli stessi file descriptor del padre; è possibile però ottenere un
comportamento analogo all'interno di uno stesso processo \textit{duplicando}
Abbiamo già visto in \secref{sec:file_sharing} come un processo figlio
condivida gli stessi file descriptor del padre; è possibile però ottenere un
comportamento analogo all'interno di uno stesso processo \textit{duplicando}
-della funzione, \func{dup2}, che permette di specificare esplicitamente qual'è
-il valore di file descriptor che si vuole avere come duplicato; il suo
+della funzione, \funcd{dup2}, che permette di specificare esplicitamente
+qual'è il valore di file descriptor che si vuole avere come duplicato; il suo
(vedi \secref{sec:file_locking}).}
Per queste operazioni di manipolazione e di controllo su proprietà e
(vedi \secref{sec:file_locking}).}
Per queste operazioni di manipolazione e di controllo su proprietà e
valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
valore (compreso lo stesso \const{SIGIO}) specifica il segnale voluto; l'uso
di un valore diverso da zero permette inoltre, se si è installato il
valore zero indica di usare il segnale predefinito, \const{SIGIO}. Un altro
valore (compreso lo stesso \const{SIGIO}) specifica il segnale voluto; l'uso
di un valore diverso da zero permette inoltre, se si è installato il
file che ha generato il segnale attraverso i valori restituiti in
\struct{siginfo\_t} (come vedremo in
\secref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG}
file che ha generato il segnale attraverso i valori restituiti in
\struct{siginfo\_t} (come vedremo in
\secref{sec:file_asyncronous_io}).\footnote{i due comandi \const{F\_SETSIG}
porta seriale, o le dimensioni di un framebuffer).
Per questo motivo nell'architettura del sistema è stata prevista l'esistenza
porta seriale, o le dimensioni di un framebuffer).
Per questo motivo nell'architettura del sistema è stata prevista l'esistenza
specifiche di ogni dispositivo particolare, usando come riferimento il solito
file descriptor. Il prototipo di questa funzione è:
\begin{prototype}{sys/ioctl.h}{int ioctl(int fd, int request, ...)}
specifiche di ogni dispositivo particolare, usando come riferimento il solito
file descriptor. Il prototipo di questa funzione è:
\begin{prototype}{sys/ioctl.h}{int ioctl(int fd, int request, ...)}