多路转接之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

 

你可能感兴趣的:(select)