Подтвердить что ты не робот

Дублирование указателей файлов?

Просто быстрый вопрос: есть ли способ дублировать указатель на файл (те, которые возвращаются 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);
4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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