首页 > 学院 > 操作系统 > 正文

多路转接之poll和select

2024-06-28 13:21:23
字体:
来源:转载
供稿:网友
多路转接之poll和select

先看poll():

 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():

 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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表