Не думаю, что вы могли бы: по крайней мере, не создавая временный файл и не оборачивая результат в FILE*
, который позволяет вам использовать "нормальные" функции доступа к файлам, такие как fread()
и т. Д.
Логика достаточно проста: чтение с a
до конца файла, затем чтение с b
, но вы не можете "попасть внутрь" процедур обработки FILE*
(по крайней мере, впортативный способ, согласно ответу Антти ), чтобы заставить их переключаться с одного файла на другой.
Вы могли бы написать функцию (ы), которая заменила специфические функции обработки файлов, которые принимают два FILE*
аргумента, например, вы можете определить fread2(void *ptr, size_t size, size_t nmemb, FILE *stream1, FILE* stream2)
, который принимает два потока, и читать из одного до тех пор, пока он не будет исчерпан, а затем переключаться на другой.
Или вы можете создать свою собственную структуру FILEPAIR
(возвращаемую / заполненную join()
), которая содержит ссылки на два FILE*
s, и затем создавать специальные функции чтения, которые работают с этой структурой (например, fread2(void *ptr, size_t size, size_t nmemb, FILEPAIR *filePair)
).