#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
int main()
{
char name[20];
fd_set input_set;
struct timeval timeout;
int ready_for_reading = 0;
int read_bytes = 0;
/* Empty the FD Set */
FD_ZERO(&input_set);
/* Listen to the input descriptor */
FD_SET(0, &input_set);
/* Waiting for some seconds */
timeout.tv_sec = 10; // 10 seconds
timeout.tv_usec = 0; // 0 milliseconds
/* Invitation for the user to write something */
printf("Enter Username: (in 15 seconds)\n");
printf("Time start now!!!\n");
/* Listening for input stream for any activity */
ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);
/* Here, first parameter is value of the socket descriptor + 1 (STDIN descriptor is 0, so
* 0 +1 = 1)
* in the set, second is our FD set for reading,
* third is the FD set in which any write activity needs to updated, which is not required
* in this case. Fourth is timeout
*/
if (ready_for_reading == -1) {
/* Some error has occured in input */
printf("Unable to read your input\n");
return -1;
} else {
if (ready_for_reading) {
read_bytes = read(0, name, 19);
printf("Read, %d bytes from input : %s \n", read_bytes, name);
} else {
printf(" 10 Seconds are over - no data input \n");
}
}
return 0;
} aynı şeyi değil, sadece bir kez, ancak karşılaşmadan sonra kırar sonsuz döngüye dize 'çıkın' Nasıldöngü nasıl seçilir() veri sonsuza yoklamak
(örneğin) . Her şekilde denedim - başarısız oldu. 10 saniye sonra hiçbir veri girilmediyse, sadece "10 saniye bitti - veri girişi yok" yazdırır ve tekrar beklemeye başlar. Girdikten sonra aynı - sadece tekrar başlar ve sonsuz döngüde her zaman aynı davranır.
Çok az umutsuzum lütfen - yardım.
Teşekkürler.
Her şeyi bir while (! Strcmp (name, "quit")) döngüsüne veya başka bir şeye koyun. :-) –
"Burada ilk parametre, kümedeki FD sayısıdır" ** no **. En yüksek FD numarası artı bir olmalı. Lütfen adam sayfasını tekrar kontrol et. – Mat
http://linux.die.net/man/2/select_tut adresinin altındaki örnek tam olarak istediğiniz şeydir. –