tambien se puede hacer en windows usando el CreateFile
Handle Handle_del_File;
char * name;
Handle_del_File=CreateFile(name,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_ALWAYS,0,NULL);
te devuelve un manipulador de fichero que luego usas para leerlo.
la ventaja es que abriendolo asi te permite abrirlo con otro programa a la vez, aunque , la verdad es que nunca lo he hecho
Para leerlo usas ReadFile (HANDLE file_handle, char * buffer, unsigned int NBytesALeer, & unsigned int NBytesLeidosConExito, (LPOVERLAPPED) NULL);
y para escribir mas de lo mismo
WriteFile(file , string , strlen(string), &n ,(LPOVERLAPPED)NULL);
Aun asi se puede usar el fopen de toda la vida , solo lo pongo como alternativa adicional.