2013-11-02 2 views
0

Моя ситуация следующая. Я получаю указатель FILE *. Я знаю, что это может указывать на тип FILE, который не поддерживает поиск (может быть PIPE). Поэтому, чтобы облегчить ситуацию, я подумал о загрузке частей файла в память в виде строкового буфера.Загрузка структуры C из строки

Проблема в том, что мой файл содержит рядом с некоторыми другими элементами структуры C, которые мне нужно загрузить в память. И до сих пор все, что я пробовал, потерпело неудачу.

Наиболее перспективным казалось fmemopen, но когда я добавил его в свой код я получил

warning: implicit declaration of function ‘fmemopen’ [-Wimplicit-function-declaration] 
stream = fmemopen (buffer, p_header.bytes, "r"); 

предупреждение и что, конечно, ничего я хочу. Он оставался неявным, хотя я добавил stdio.h include.

Можно ли что-либо сделать по этому поводу? Могу ли я каким-то образом создать что-то типа FILE * в памяти, чтобы я мог называть его? Или есть способ, как читать структуру из строки?

Я использовал Fread следующим образом:

fread(&var_of_type_love_struct_t, sizeof(love_struct_t), 1, myfile); 
+1

Посмотрите на страницу man для fmemopen, она расскажет вам о некоторых #defines. Предполагая, что ваша система даже имеет его. В любом случае «memcpy» - это то же самое, что и fread from fmemopen. – bmargulies

+2

Ваш вопрос продолжает описывать 'FILE *', но вы не показываете свой вызов 'fopen'. ** Опубликовать больше кода ** – abelenky

ответ

2

Предупреждение о fmemopen является то, что компилятор не нашел прототип, добавьте

#define _GNU_SOURCE 

до того включая все заголовки, или , при использовании GCC добавьте -D_GNU_SOURCE к вариантам.

Смежные вопросы