3 votes

Comment vérifier s'il y a suffisamment d'espace avant WriteFile en c dans Windows?

  hPipe = CreateNamedPipe( 
     lpszPipename,             // nom du pipe 
     PIPE_ACCESS_DUPLEX,       // accès lecture/écriture 
     PIPE_TYPE_MESSAGE |       // type de pipe message 
     PIPE_READMODE_MESSAGE |   // mode lecture de message 
     PIPE_WAIT,                // mode bloquant 
     PIPE_UNLIMITED_INSTANCES, // instances max. 
     100,                  // taille du tampon de sortie 
     100,                  // taille du tampon d'entrée 
     0,                        // délai d'attente client 
     NULL);                    // attribut de sécurité par défaut 

  DWORD totalBytesAvailable; 
  PeekNamedPipe( 
    hPipe ,                // __in       HANDLE hNamedPipe, 
    NULL,                  // __out_opt  LPVOID lpBuffer, 
    0,                     // __in       DWORD nBufferSize, 
    NULL,                  // __out_opt  LPDWORD lpBytesRead, 
    &totalBytesAvailable,  // __out_opt  LPDWORD lpTotalBytesAvail, 
    NULL                   // __out_opt  LPDWORD lpBytesLeftThisMessage 
  ); 
    if(totalBytesAvailable permet)
    WriteFile( tmp_pipe, pBuffer, BufferLen, &dwWritten, NULL );

Comme vous pouvez le voir, j'ai utilisé PeekNamedPipe pour obtenir l'espace disponible, mais il s'avère que totalBytesAvailable est toujours 0, comment faire correctement ?

0voto

pascal Points 1823

Créez un thread pour gérer l'écriture dans le tuyau, afin qu'il ne soit pas un problème d'avoir l'écrivain en attente que le client vide le tuyau?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X