2011-05-23 11 views
12

Solo una pregunta rápida: ¿Hay alguna forma de duplicar un puntero de archivo (los devueltos por fopen()), similar a cómo dup() duplica los manejadores de archivos devueltos por funciones como open()?¿Duplicar punteros de archivo?

Básicamente, quiero ser capaz de hacer algo como esto:

FILE *fp = fopen("some_file", "r"); 
FILE *fp2 = /* do something to duplicate the file pointer */; 
fclose(fp); // fp2 is still open 
/* do something with fp2 */ 
fclose(fp2); 

Respuesta

10

Usted podría utilizar fileno para obtener un descriptor de un FILE*, dup que, a continuación, utilizar fdopen para obtener una nueva FILE* de la nuevo descriptor

+0

Eso parece una buena solución, gracias: D – Frxstrem

13
FILE *fp2 = fdopen (dup (fileno (fp)), "r"); 
+0

1, hablar de un fragmento de patito feo :) – user7116

+2

debe agregar algo de manejo de errores. :-) –

1

Abrí dos veces el mismo archivo y asigné dos punteros y al final cerré ambos por separado. En mi caso, tuve que mostrar el contenido en una ventana de texto usando un puntero y procesar los datos en el archivo usando el otro puntero. p.

//define global variables 

FILE *fp1 = fopen("some_file", "r"); 

//fp1 used in functioncall to display textbuffer 

fclose(fp1); 

//fp2 used in functioncall to process data 

fclose(fp2);