Sto scrivendo un'applicazione client-server che fa uso di mailslot, il processo client passa una stringa al server e questo deve scrivere tale stringa su un file.
Ho questo problema, il server crea il file su cui scrivere, ma il file resta vuoto.
La stringa viene passata correttamente, tant'è che se al processo server la faccio stampare sulla console non ho problemi... perché questa stringa non la scrive sul file?
Ecco il codice del server:
codice:
#include <windows.h>
#include <stdio.h>

#define ErroreIO               -1

int main(int argc,char **argv)
{
	HANDLE        handle;
	LPCTSTR       errMsg, FileDaScrivere = "output.txt";
        FILE          *uscita;


	/* Crea il mailslot */
	handle = CreateMailslot("\\\\.\\mailslot\\blort",
					0,
					MAILSLOT_WAIT_FOREVER,
					NULL);
	if (handle == INVALID_HANDLE_VALUE) 
	{
		TCHAR	strError[256];

		errMsg = "CreateMailslot ha fallito: %s";
print_err:
		// Prende il messaggio d'errore da Windows associato al numero d'errore
		FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(),
                                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                                      &strError[0], 256, 0);

		// Visualizza l'errore
		printf(errMsg, &strError[0]);

		// Chiude i mailslot aperti
		if (handle != INVALID_HANDLE_VALUE) CloseHandle(handle);

		return(-1);
	}

	while(1)
	{
		DWORD	msgSize;
		BOOL	err;

        uscita = fopen(FileDaScrivere,"w");
        if(uscita == NULL)
            return ErroreIO;


		/* Prende la dimensione del prossimo record */
		err = GetMailslotInfo(handle, 0, &msgSize, 0, 0);

		/* Controlla se c'è un errore */
		if (!err)
		{
			errMsg = "GetMailslotInfo failed: %s";
			goto print_err;
		}
			
		/* Controllo se msgSize è nullo */
		if (msgSize != (DWORD)MAILSLOT_NO_MESSAGE)
		{
			void *	buffer;

			/* Allocazione di memoria */
			buffer = GlobalAlloc(GMEM_FIXED, msgSize);
			if (!buffer) printf("Errore allocazione del blocco di memoria!");
			else
			{
				DWORD	numRead;

				/* legge il record */
				err = ReadFile(handle, buffer, msgSize, &numRead, 0);

				/* Controlla se c'è un errore */
				if (!err) printf("ReadFile error: %d", GetLastError());

				/* Mi assicuro di aver letto tutti i bytes */
				else if (msgSize != numRead)
                                      printf("ReadFile non ha letto il giusto numero di bytes!");

				else
				{
                                     /***********************************
                                      ***********************************
                                      Qui sotto le stampe su console e su file
                                     ***********************************
                                     ***********************************/

                                     // bufer contiene la stringa
                                     printf(buffer); //scrive sulla console il cont. di buffer
                                     pririntf(uscita,buffer); //non scrive sul file
				}

				/* Libero il buffer */
				GlobalFree(buffer);
			}
		}

		/* pausa */
		Sleep(1000);
	}

	return(0);
}