Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1066444
  • 博文数量: 226
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2504
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-21 14:12
文章分类

全部博文(226)

文章存档

2011年(1)

2010年(2)

2009年(68)

2008年(4)

2007年(27)

2006年(124)

我的朋友

分类: C/C++

2007-01-13 11:38:06

同过select对/dev/tty /dev/mouse 进行监视,看是否有输入动作。

#include

#include

#include

#include

#include

#define ERR(m,x) { perror(m); exit(x); }

main(int ac, char* av[])

{

    int fd1, fd2;

    struct timeval timeout;

    fd_set readfds;

    int maxfd;

    int retval; //select return value

    if( ac != 4 )

    {

        printf( "usage: %s file file timeout", *av );

        exit(1);

    }

    if( (fd1 = open(av[1], O_RDONLY) ) == -1 )

        ERR(av[1], 2 );

     if( (fd1 = open(av[2], O_RDONLY) ) == -1 )

        ERR(av[2], 3 );  

     maxfd = 1 + (fd1 〉fd2? fd1:fd2 ) ;

     while(1)

     {

         FD_ZERO( &readfds );

         FD_SET( fd1, &readfds);

         FD_SET( fd2, &readfds);

         timeout.tv_sec = atoi( av[3] ); //set seconds

         timeout.tv_usec = 0; //no useconds

         //wait for input

         retval = select ( maxfd, &readfds, &timeout );

         if( -1 == retval )

             ERR( "select", 4 );

         if( retval > 0 )

         {

             if( FD_ISSET(fd1, &readsets))

                 showData( av[1], fd1 );

             if( FD_ISSET(fd2, &readsets))

                 showData( av[2], fd2);

         }

         else

             printf("No input after %d seconds\n", atoi(av[3]) );

     }

}

void showData( char* fname, int fd )

{

    char buffer[1024];

    int n;

    printf("In file %s\n", fname);

    fflush(stdout);

    n = read( fd, buffer, 1024 )

    if ( n == -1 )

       ERR("read", 5 );

    write( 1, buffer, n);

    write( 1, "\n", 1 );

}

 

阅读(5013) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~