Ответ 1
Вы можете использовать fileno
для получения дескриптора для FILE*
, dup
, а затем использовать fdopen
, чтобы получить новый FILE*
из нового дескриптора.
Просто быстрый вопрос: есть ли способ дублировать указатель на файл (те, которые возвращаются 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);
Вы можете использовать fileno
для получения дескриптора для FILE*
, dup
, а затем использовать fdopen
, чтобы получить новый FILE*
из нового дескриптора.
FILE *fp2 = fdopen (dup (fileno (fp)), "r");
Я открыл дважды тот же файл и назначил два указателя и в конце закрыл оба отдельно. В моем случае мне пришлось показывать содержимое в текстовом окне с помощью одного указателя и обрабатывать данные в файле с помощью другого указателя. например.
//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);