Если вы работаете в системе POSIXy (которая, как я полагаю, у вас есть, поскольку у вас есть fileno()
), вы можете использовать dup()
для клонирования дескриптора файла:
int newfd = dup(fileno(stream));
fclose(stream);
Или вы можете передать fdopen()
дубликат файлового дескриптора:
FILE *stream = fdopen(dup(fd), "r");
В любом случае, другая копия fd не закроется с FILE *
. Однако имейте в виду, что указатель местоположения является общим для , поэтому будьте осторожны, если вы используете оба одновременно. Кроме того, любые блокировки fcntl()
, сохраненные на оригинальном fd , будут разблокированы при закрытии копии.