2012-06-13 4 views
0

select를 사용하여 여러 개의 sickets을 모니터링하는 간단한 서버를 작성하고 있습니다.select를 사용하여 키보드 입력 감지

while (1) { /* Main server loop - forever */ 
    build_select_list(); 
    timeout.tv_sec = 1; 
    timeout.tv_usec = 0; 

    readsocks = select(maxSock+1, &socks, (fd_set *) 0, (fd_set *) 0, &timeout); 

    if (readsocks < 0) { 
     perror("select"); 
     exit(EXIT_FAILURE); 
    } 
    if (readsocks == 0) { 
     printf("."); 
     fflush(stdout); 
    } else 
     read_socks(); 
} 

내가 그것을 모니터링하고 그것에 대해 "보고서"된 소켓에 선택 detecs 변화를 알고

여기 내 코드입니다. 선택 (?)을 사용하여 사용자로부터 키보드 입력을 감지 할 수 있습니까? 그렇지 않다면 어떻게해야합니까?

+0

이것은 C++보다는 C++와 많이 비슷합니다. 너무 많이해서 나는 그것을 다시 찾을 것이다. 만약 당신이 정말로'C++ '를 쓰고 있다면 롤백 할 수있다. – Paulpro

+0

이것 좀보세요 http://stackoverflow.com/questions/2780051/linux-c-select-piping-echo-to-input-works-but-reading-from-keyboard-doesnt – mathematician1975

답변

2

STDIN_FILENO (unistd.h의 경우)을 사용하거나 fileno(stdin) (stdio.h의 경우)을 사용하여 콘솔 입력의 파일 설명자를 가져올 수 있습니다. 이것을 '읽기'fdset에 추가하면 select은 콘솔 입력이 가능한 시점을 나타내는 "올바른 작업 수행"을 수행합니다. 거기에서 다른 파일 기술자처럼 읽습니다.