2011-05-23 16 views
12

Po prostu krótkie pytanie: czy istnieje sposób na skopiowanie wskaźnika pliku (zwróconego przez fopen()), podobnego do tego, jak dup() duplikuje procedury obsługi plików zwrócone przez funkcje takie jak open()?Powielanie wskaźników pliku?

Zasadniczo, chcę być w stanie zrobić coś takiego:

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); 

Odpowiedz

10

Można użyć fileno uzyskać deskryptora dla FILE*, dup to, a następnie użyj fdopen dostać nową FILE* przeprowadzoną nowy deskryptor.

+0

To wydaje się być dobrym rozwiązaniem, dzięki: D – Frxstrem

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

+1, mówić o brzydkie kaczątko urywek :) – user7116

+2

Należy dodać obsługę błędów. :-) –

1

Otworzyłem dwa razy ten sam plik i przypisano dwa wskaźniki, a na koniec oba zostały osobno zamknięte. W moim przypadku musiałem pokazać zawartość w oknie tekstowym za pomocą jednego wskaźnika i przetworzyć dane w pliku za pomocą drugiego wskaźnika. np.

//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);