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
  • 相关阅读:
    (转)怎样获得与激活Windows 7超级管理员权限
    (转) C代码优化方案
    英语词汇立体记忆 02
    (转)LUA和C之间的函数调用
    通过lua自带例子学习lua 01
    英语词汇立体记忆 01
    反射(类加载内存分析)
    反射(类加载器的作用)
    反射(动态创建对象操作属性)
    反射(分析类初始化)
  • 原文地址:https://www.cnblogs.com/takeaction/p/4376318.html
Copyright © 2011-2022 走看看