2011-05-23 2 views
12

Просто быстрый вопрос: есть ли способ дублировать указатель на файл (возвращаемый fopen()), подобно тому, как dup() дублирует обработчики файлов, возвращаемые такими функциями, как open()?Дублирование указателей файлов?

В принципе, я хочу, чтобы иметь возможность сделать что-то вроде этого:

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

ответ

10

Вы можете использовать fileno получить дескриптор для FILE*, dup что, а затем использовать fdopen, чтобы получить новый FILE* от новый дескриптор.

+0

Это кажется хорошим решением, благодаря: D – Frxstrem

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

+1, говорить о гадком утенке сниппета :) – user7116

+2

Если добавить обработку ошибок. :-) –

1

Я открыл дважды тот же файл и назначил два указателя и в конце закрыл оба отдельно. В моем случае мне пришлось показывать содержимое в текстовом окне с помощью одного указателя и обрабатывать данные в файле с помощью другого указателя. , например.

//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); 
Смежные вопросы