2012年6月20日星期三

linux系统编程:select()示例程序

 
 

satan 通过 Google 阅读器发送给您的内容:

 
 

于 12-6-20 通过 averiany涂鸦馆 作者:averainy

select()系统调用提供了一种实现同步I/O多路复用的机制,下面这个示例演示了select系统调用的过程
#include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>  #define TIMEOUT 5 /*select timeout in seconde*/ #define BUF_LEN 1024 /*read buffer in bytes */  int main(void) {         struct timeval tv;         fd_set readfds;         int ret;         /*Wait on stdin for input.*/         FD_ZERO(&readfds);         FD_SET(STDIN_FILENO, &readfds);         /*Wait up to five seconds.*/         tv.tv_sec=TIMEOUT;         tv.tv_usec=0;         /*ALL Right, now block! */         ret=select(STDIN_FILENO + 1,                 &readfds,                 NULL,                 NULL,                 &tv);         if (ret==-1) {                 perror("select");                 return 1;         } else if (!ret) {                 printf("%d seconds elapsed,\n",TIMEOUT);                 return 0;         }          /*          * Is out file descrptor ready to read?          * (It must be, as it was the only fd that          * we provided and the call returned          * nonzero,but we will humor ourselves.)          */         if (FD_ISSET(STDIN_FILENO,&readfds)){                 char buf[BUF_LEN+1];                 int len;                 /* guaranteed to not block */                 len=read(STDIN_FILENO, buf, BUF_LEN);                 if (len== -1) {                         perror("read");                         return 1;                 }                 if (len) {                         buf[len]='\0';                         printf("read: %s\n",buf);                 }                 return 0;         }         fprintf(stderr, "This should not happen!\n");         return 1; }
这个例子是select的manpage里的,具体更具体的内容看一看man select

本文作者:averainy | 本文地址: 固定链接 | 我的腾讯微博|我的google+
本站文章除特殊标明者外均为原创,版权所有,如需转载,请以超链接形式注明作者和原始出处及本声明

相关日志


 
 

可从此处完成的操作:

 
 

没有评论:

发表评论