2010-05-28 17 views
5

Standart Win32 dosyası I/O API'sini (CreateFile/ReadFile/etc) kullanarak, bir dosyanın okunabilir hale gelmesini veya dosyada bir özel durumun oluşmasını beklemeyi deniyorum.Win32 seçin/anket/eof/ANYTHING?

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

Ve bazı dosyalar üzerinde ilginç bir şey var ne zaman dönecektir seçmek: Windows herhangi bir iyi POSIX desteği olsaydı, ben sadece yapabilirdi. Windows, seç veya yoklamayı desteklemiyor. İnce. daha fazla veri okunacak kullanılabilir olduğunda yukarıdaki döngü çıkarsınız

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

: Ben dosyayı alıp böyle bir şey yapabileceğini düşündüm. Ancak, Windows, ya eof() eşdeğeri yok! Dosyada ReadFile() yöntemini çağırabilir ve bu şekilde olup olmadığını belirleyebilirim. Ancak, o zaman bu zamanda okumayı halletmem gerekirdi - bir dosyanın okunabildiğini, gerçekten okumadan anlayabilmeyi umuyordum.

Seçeneklerim nelerdir?

cevap

7

Windows, eşzamansız G/Ç için tamamen farklı bir mimariye sahiptir. İlgili I/O completion ports ile veya bunlarla olmadan overlapped I/O'u kullanmanız gerekecektir.

Standart Winsock arabiriminin POSIX benzeri bir select() işlevine sahip olduğunu, ancak yalnızca ağ soketleriyle çalıştığını unutmayın.

+1

Vay Windows'dan nefret ediyorum. Basit olması gereken her şey değildir. Gerçekten 'GetEndOfFile' işlev türü yok mu? Orada bir SetEndOfFile var :( – Andrew

+2

@Andrew, Windows POSIX uyumlu değildir – CMircea

+0

Farklı, bir model ile açıkça belli değil, bazı şeyler daha basit ve daha karmaşık olabilir.Aynı şey hakkında düşünmek zorunda farklı bir bakış açısı –