POSIX задает функцию fdopen, которая создает FILE
для файлового дескриптора. POSIX также указывает функцию fileno, которая возвращает дескриптор файла для FILE
. Вместе эти два могут быть использованы для создания второго FILE
доступа к тому же файловому описателю, что и существующий файл:
FILE *secondfile(FILE *f, const char *mode)
{
int fd = fileno(f);
return fd >= 0 ? fdopen(fd, mode) : NULL;
}
Является ли это хорошо определенной операцией в POSIX? Что произойдет, когда я получаю как исходный FILE
, так и второй FILE
, который я сделал для одного и того же дескриптора файла? Определено ли взаимодействие? Если да, то как?
Исторически Unices использовал фиксированную таблицу структур FILE
для 20 файлов, которые вы могли открыть. Вызов fdopen()
в файловом дескрипторе, который уже был связан с FILE
, таким образом, повредит существующий файл и даст поведение undefined. Я не уверен, что POSIX по-прежнему допускает такую реализацию stdio
, поэтому я задаю этот вопрос.