Multi-channel transfer: poll and select, transfer to pollselect
First look at 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 ("0000o1 ", 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 ("ikeo1: % 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 (" 0000o1 "); 49 unlink ("fifo2"); 50 51 return 0; 52}View Code
Let's talk about 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 ("0000o1 ", 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 ("ikeo1: % 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 (" 0000o1 "); 49 unlink ("fifo2"); 50 51 return 0; 52}View Code