2010-05-28 14 views
5

Usando el archivo estándar de Win32 API de O/(CreateFile/ReadFile/etc), yo estoy tratando de esperar a que un archivo se convierta legible, o una excepción que se produzca en el archivo. Si Windows tenía ningún apoyo POSIX decente, tan sólo pudiera hacer:Win32 select/poll/eof/NADA?

select(file_count, files_waiting_for_read, NULL, files_waiting_for_excpt, NULL, NULL); 

Y seleccione devolverá cuando no hay nada interesante en algunos de los archivos. Windows no admite select o poll. Multa. Pensé que podría tomar el archivo y hacer algo como:

while(eof(file_descriptor)) 
{ 
    Sleep(100); 
} 

El ciclo anterior saldría cuando haya más datos disponibles para leer. ¡Pero no, Windows tampoco tiene un equivalente de eof()! Podría llamar a ReadFile() en el archivo y determinar si se encuentra al mismo tiempo. Pero, entonces, tendría que manejar la lectura en ese momento. Espero poder descifrar que un archivo es legible, sin leerlo realmente.

¿Cuáles son mis opciones?

Respuesta

7

Windows tiene una arquitectura completamente diferente para E/S asíncrona. Necesitará usar overlapped I/O con o sin el relacionado I/O completion ports.

Tenga en cuenta que la interfaz estándar de Winsock tiene una función similar a POSIX select(), pero que solo funciona con conectores de red.

+1

Wow odio de Windows. Todo lo que debería ser simple no lo es. ¿Realmente no existe el tipo de función 'GetEndOfFile'? Veo que hay una SetEndOfFile :( – Andrew

+2

@ Andrew, Windows no es compatible con POSIX – CMircea

+0

diferente no significa inferior;., Obviamente, con un modelo algunas cosas pueden ser más simple y otra más complicada Sólo hay que pensar lo mismo de una. perspectiva diferente. –