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
  • 38,761
  • 9
  • 79
  • 119

3 Answers3

25
FILE *fp2 = fdopen (dup (fileno (fp)), "r");
Gonzalo
  • 20,805
  • 3
  • 75
  • 78
16

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
  • 39,140
  • 13
  • 95
  • 92
-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,477
  • 7
  • 27
  • 46