zoukankan      html  css  js  c++  java
  • 多路转接之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(" %[^
    ]", buf);    
    28                 printf("keypad:%s
    ", 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] = '';
    35                 printf("fifo1:%s", buf);
    36             }
    37             if(pfd[2].revents&POLLIN)
    38             {
    39                 int n = read(fd2, buf, sizeof(buf));    
    40                 buf[n] = '';
    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(" %[^
    ]", buf);    
    28                 printf("keypad:%s
    ", 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] = '';
    35                 printf("fifo1:%s", buf);
    36             }
    37             if(pfd[2].revents&POLLIN)
    38             {
    39                 int n = read(fd2, buf, sizeof(buf));    
    40                 buf[n] = '';
    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
  • 相关阅读:
    Perl 常用的小细节总结
    Linux-root管理员创建新用户
    Linux-普通用户和root用户任意切换
    Linux-设置终端界面的字体颜色和自定义常用快捷功能
    Linux命令行好玩的命令
    如何配一副好的眼镜
    linux下面升级 Python版本并修改yum属性信息
    mysql远程登陆
    Linux 如何找到100M以上的大文件
    将raspberry 3B+的apt替换为国内源
  • 原文地址:https://www.cnblogs.com/takeaction/p/4376318.html
Copyright © 2011-2022 走看看