Невозможно на простом C. В простом C весь доступ к файлу происходит через дескрипторы FILE *
, и они могут быть созданы только с fopen()
и freopen()
и в обоих случаях должны указывать путь к файлу. Поскольку C пытается быть максимально переносимым, он ограничивает ввод-вывод абсолютным абсолютным минимумом, который, возможно, все системы могут каким-либо образом поддерживать.
Если у вас есть доступный API POSIX (например, Linux, macOS, iOS, FreeBSD, большинство других систем UNIX), вы можете использовать fmemopen()
:
char dataInMemory[] = "This is some data in memory";
FILE * fileDescriptor = fmemopen(dataInMemory, sizeof(dataInMemory), "r");
Это настоящий дескриптор файла, который можно использовать со всеми API-интерфейсами C-файлов. Также следует разрешить поиск, что невозможно, если вы работаете с каналами, поскольку каналы не поддерживают поиск (вы можете эмулировать поиск вперед, но нет способа когда-либо искать назад).