#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;
} 동일한 작업을 수행하지만, 그냥 한 번,하지만 발생 후 휴식 무한 루프에 문자열을 '종료'하는 방법루프를 선택하는 방법() 데이터 무한히를 올릴 수
(예를 들어) . 내가 시도한 모든 방법 - 실패했습니다. 10 초 후에 아무 데이터도 입력되지 않으면 "10 초 이상 끝났습니다 - 데이터가 입력되지 않았습니다"라는 메시지가 출력되고 다시 대기 상태가됩니다. 입력 후와 동일 - 다시 시작되고 무한 루프에서 매번 동일한 동작을합니다.
조금만 더 절실하게 생각하십시오. 제발 도와주세요.
감사합니다.
while (! strcmp (name, "quit")) 루프 또는 무엇인가에 모든 것을 넣으시겠습니까? :-) –
"첫 번째 매개 변수는 집합의 FD 수입니다."** 아니요 **. 가장 높은 FD 번호 + 1이어야합니다. 가서 맨 페이지를 다시 확인하십시오. – Mat
http://linux.die.net/man/2/select_tut의 하단에있는 예가 원하는 것입니다. –