2010-09-04 39 views
0

在Linux上,我可以讀取可用的輸入,而不會阻塞過程:如何讀取可用的輸入而不堵在Windows

fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK) 
char buf[n]; 
int r = fread(buf, 1, n, stdin); 
if (r == 0){ 
    printf("nothing\n"); 
} 
else { 
    printf("read: "); 
    fwrite(buf, 1, r, stdout); 
    printf("\n"); 
} 

輸入起點可以是任何東西,如一個文件,一個終端或管道。

如何在Windows XP上執行此操作?

謝謝。

回答

0

爲什麼不讀取第二個線程的輸入?根據你的情況,這可能是一個更簡單的方法,而不是使用非阻塞IO。

0

您可以通過將FILE_FLAG_OVERLAPPED傳遞到CreateFile()來實現此目的。它看起來不像Linux,可能會有一些細微的差別,但它實現了同樣的事情。

查看Synchronous vs. Asynchronous IO上的MSDN頁面,其中提供了有關各種選項的更多詳細信息。

相關問題