La funzione dup2 in C
-
Usa la funzione
dup2
per duplicare un descrittore di file in C -
Usa la funzione
dup
per duplicare un descrittore di file in C
Questo articolo spiegherà diversi metodi su come utilizzare la funzione dup2
in C.
Usa la funzione dup2
per duplicare un descrittore di file in C
I file vengono solitamente manipolati dopo essere stati aperti utilizzando la chiamata di sistema open
. In caso di successo, open
restituisce un nuovo descrittore di file associato al file appena aperto. Nei sistemi basati su Unix, il sistema operativo mantiene una lista di file aperti per ogni programma in esecuzione, chiamato tabella di file. Ogni voce è rappresentata utilizzando il tipo intero int
. Questi numeri interi sono chiamati descrittori di file in questi sistemi e molte chiamate di sistema accettano i valori dei descrittori di file come parametri.
Ogni programma in esecuzione ha tre descrittori di file aperti per impostazione predefinita quando il processo viene creato, a meno che non scelgano di chiuderli esplicitamente. La funzione dup2
crea una copia del descrittore di file specificato e gli assegna un nuovo numero intero. dup2
accetta un vecchio descrittore di file da clonare come primo parametro e il secondo parametro è il numero intero per un nuovo descrittore di file. Di conseguenza, entrambi questi descrittori di file puntano allo stesso file e possono essere utilizzati in modo intercambiabile. Si noti che se l’utente specifica un numero intero attualmente utilizzato dal file aperto come secondo parametro, verrà chiuso e quindi riutilizzato come descrittore di file clonato.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern int counter;
int main(void) {
int fd = open("tmp.txt", O_WRONLY | O_APPEND);
printf("tmp.txt fd = %d\n", fd);
dup2(fd, 121);
dprintf(121, "This string will be printed in tmp.txt file\n");
exit(EXIT_SUCCESS);
}
Produzione:
tmp.txt fd = 3
L’esempio sopra mostra l’uso di base della funzione dup2
, dove un file arbitrario chiamato tmp.txt
viene aperto in modalità append
e vi viene scritto del testo formattato. Il descrittore di file predefinito è 3
restituito dalla chiamata di sistema open
. Dopo aver eseguito la chiamata alla funzione dup2
con il secondo argomento di 121
, lo stesso file può essere indirizzato usando il nuovo descrittore di file. Di conseguenza, chiamiamo la funzione dprintf
, che è simile alla funzione printf
tranne per il fatto che richiede un ulteriore argomento descrittore di file che specifica la destinazione per la scrittura dell’output.
Usa la funzione dup
per duplicare un descrittore di file in C
In alternativa, un’altra funzione chiamata dup
esegue la clonazione del descrittore di file in modo simile a dup2
. Tuttavia, la funzione dup
accetta un singolo argomento del descrittore di file da copiare e restituisce automaticamente quello appena creato. L’esempio seguente mostra l’utilizzo di dup
, dove memorizziamo il valore restituito in un tipo int
e poi passiamo la funzione dprintf
al descrittore di file recuperato. Notare che l’utente è responsabile dell’implementazione delle routine di controllo degli errori per entrambe le funzioni per verificare la corretta esecuzione. Vedere la pagina di manuale dup
/dup2
per i dettagli specifici qui.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern int counter;
int main(void) {
int fd = open("tmp2.txt", O_WRONLY | O_APPEND);
printf("tmp2.txt fd = %d\n", fd);
int dup_fd = dup(fd);
dprintf(dup_fd, "This string will be printed in tmp2.txt file\n");
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook