Как прочитать доступный ввод без блокировки в Windows - PullRequest
0 голосов
/ 04 сентября 2010

В Linux я могу читать доступные данные, не блокируя процесс:

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?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2010

Почему бы не прочитать вход из второго потока?В зависимости от вашей ситуации, это может быть гораздо более простой подход вместо использования неблокирующих операций ввода-вывода.

0 голосов
/ 05 сентября 2010

Вы можете добиться этого в Windows, передав FILE_FLAG_OVERLAPPED в CreateFile().Он не совсем похож на Linux и может иметь некоторые небольшие отличия, но он достигает того же.

Взгляните на страницу MSDN на Синхронный или Асинхронный ввод-вывод , которыйпредоставляет вам еще больше деталей о различных вариантах.

...