c语言 fread()函数的二进制文件处理方式,该如何解决

c语言 fread()函数的二进制文件处理方式
typedef struct {
  int length; /* 数据长度 */
  char *data; /* 数据 */
} GraphData;
GraphData graphdata;
我用fopen(filename,"rb");打开一个二进制文件,然后把二进制文件的内容和长度放到以上的结构中,请问如何实现?
用fread()函数来实现的话,需要用循环处理吗,还是用一条语句就可以把文件的内容读入到graphdata.data中去? 
问题补充:我读入的是一个JPG文件,所以里面没有数组之类的东西,length是存储JPG文件的长度,data是存储JPG文件的数据用的。 

最好能够提供如何向graphdata.data付值的方法。C语言不太熟。


------解决方案--------------------
la了一句:标红的补上

FILE * fp = NULL; 
int len; 
if(NULL == (fp=fopen(filename,"rb"))) 
return -1; 
fseek(fp,0,SEEK_END); 
len = ftell(fp); 
fseek(fp,0,SEEK_SET);
graphdata.data = (char *)malloc(len+1); 
graphdata.length = fread(graphdata.data,1,len,fp); 
graphdata.data[len] = '\0'; 
fclose(fp);