asynctest.c
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * asynctest.c: use async notification to read stdin
  3.  */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #include <signal.h>
  9. #include <fcntl.h>
  10. int gotdata=0;
  11. void sighandler(int signo)
  12. {
  13.     if (signo==SIGIO)
  14.         gotdata++;
  15.     return;
  16. }
  17. char buffer[4096];
  18. int main(int argc, char **argv)
  19. {
  20.     int count;
  21.     struct sigaction action;
  22.     memset(&action, 0, sizeof(action));
  23.     action.sa_handler = sighandler;
  24.     action.sa_flags = 0;
  25.     sigaction(SIGIO, &action, NULL);
  26.     fcntl(STDIN_FILENO, F_SETOWN, getpid());
  27.     fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL) | FASYNC);
  28.     while(1) {
  29.         /* this only returns if a signal arrives */
  30.         sleep(86400); /* one day */
  31.         if (!gotdata)
  32.             continue;
  33.         count=read(0, buffer, 4096);
  34.         /* buggy: if avail data is more than 4kbytes... */
  35.         write(1,buffer,count);
  36.         gotdata=0;
  37.     }
  38. }