19

Just a quick question: Is there a way to duplicate a file pointer (those returned by fopen()), similar to how dup() duplicates a file handlers returned by functions like open()?

Basically, I want to be able to do something like this:

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);
Frxstrem
  • 34,562
  • 9
  • 73
  • 106

3 Answers3

24
FILE *fp2 = fdopen (dup (fileno (fp)), "r");
Gonzalo
  • 20,192
  • 3
  • 72
  • 77
15

You could use fileno to get a descriptor for a FILE*, dup that, and then use fdopen to get a new FILE* from the new descriptor.

eduffy
  • 37,790
  • 12
  • 92
  • 91
-1

I opened twice the same file and assigned two pointers and in the end closed both separately. In my case I had to show the content in a text window using one pointer and process the data in file using the other pointer. e.g.

//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);
ilim
  • 4,342
  • 7
  • 26
  • 44