星空网 > 软件开发 > 操作系统

多路转接之poll和select

先看poll():

多路转接之poll和selectimages/loading.gif' data-original="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />多路转接之poll和select
 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/stat.h> 5 #include <sys/types.h> 6 #include <fcntl.h> 7 #include <poll.h> 8  9 #define oops(x, n) { perror(x); exit(n); }10 11 int main()12 {13   mkfifo("fifo1", 0644);  14   mkfifo("fifo2", 0644);  15   16   int fd1 = open("fifo1", O_RDWR);17   int fd2 = open("fifo2", O_RDWR);18   char buf[1000];19   for(;;)20   {21     struct pollfd pfd[] = {{0, POLLIN}, {fd1, POLLIN}, {fd2, POLLIN}};22     int ret = poll(pfd, 3, 1);23     if(ret > 0)24     {25       if(pfd[0].revents&POLLIN)26       {27         scanf(" %[^\n]", buf);  28         printf("keypad:%s\n", buf);29         if(strcmp(buf, "quit") == 0) break;  30       }31       if(pfd[1].revents&POLLIN)32       {33         int n = read(fd1, buf, sizeof(buf));  34         buf[n] = '\0';35         printf("fifo1:%s", buf);36       }37       if(pfd[2].revents&POLLIN)38       {39         int n = read(fd2, buf, sizeof(buf));  40         buf[n] = '\0';41         printf("fifo2:%s", buf);42       }43     }44 45   }46   close(fd1);47   close(fd2);48   unlink("fifo1");49   unlink("fifo2");50 51   return 0;52 }

View Code


再来说说select():

多路转接之poll和select多路转接之poll和select
 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/stat.h> 5 #include <sys/types.h> 6 #include <fcntl.h> 7 #include <poll.h> 8  9 #define oops(x, n) { perror(x); exit(n); }10 11 int main()12 {13   mkfifo("fifo1", 0644);  14   mkfifo("fifo2", 0644);  15   16   int fd1 = open("fifo1", O_RDWR);17   int fd2 = open("fifo2", O_RDWR);18   char buf[1000];19   for(;;)20   {21     struct pollfd pfd[] = {{0, POLLIN}, {fd1, POLLIN}, {fd2, POLLIN}};22     int ret = poll(pfd, 3, 1);23     if(ret > 0)24     {25       if(pfd[0].revents&POLLIN)26       {27         scanf(" %[^\n]", buf);  28         printf("keypad:%s\n", buf);29         if(strcmp(buf, "quit") == 0) break;  30       }31       if(pfd[1].revents&POLLIN)32       {33         int n = read(fd1, buf, sizeof(buf));  34         buf[n] = '\0';35         printf("fifo1:%s", buf);36       }37       if(pfd[2].revents&POLLIN)38       {39         int n = read(fd2, buf, sizeof(buf));  40         buf[n] = '\0';41         printf("fifo2:%s", buf);42       }43     }44 45   }46   close(fd1);47   close(fd2);48   unlink("fifo1");49   unlink("fifo2");50 51   return 0;52 }

View Code

 




原标题:多路转接之poll和select

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流