La apertura se hace agregando la letra b al mode de apertura:
//de lectura
//fp=fopen("archivo.bin","rb");
//o de escritura
fp=fopen("archivo.bin","w+b");
Ejemplo de posicionamiento, lectura y rescritura :
long offset;
DATA *data;
...
size=sizeof(DATA);
data=malloc(size);
...
offset=ftell(fp);
fread(data,size,1,fp);
data->algo=1000;
fseek(fp,-(offset+size),1);
fwrite(data,size,1,fp);
rewind(fp);
En size dejamos el tamaño de la estructura.
Pedimos memoria con malloc para la estructura DATA y su puntero data.
En offset dejamos la posicion del archivo.
Con fread leemos a data, size bytes, 1 vez.
Modificamos algo en la estructura data.
Con fseek volvemos atras size bytes+offset.
Reescribimos data con fwrite.
Rebobinamos el archivo con rewind.
Avisa como te fue.