Дублирование файловых указателей? - PullRequest
17 голосов
/ 23 мая 2011

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

Ответы [ 3 ]

17 голосов
/ 23 мая 2011
FILE *fp2 = fdopen (dup (fileno (fp)), "r");
11 голосов
/ 23 мая 2011

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

0 голосов
/ 02 февраля 2017

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

//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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...