(1)client1,基于SIGIO的写法:

 1 #include <sys/types.h>
 2 #include <sys/stat.h>
 3 #include <fcntl.h>
 4 #include <unistd.h>
 5 #include <signal.h>
 6 
 7 #include <stdio.h>
 8 #include <stdlib.h>
 9 #include <errno.h>
10 
11 #define BUFSIZE 128
12 
13 static int fdr;
14 static int fdw;
15 
16 static void handler(int unuse)
17 {
18     int ret;
19     char buf[BUFSIZE];
20 
21     ret = read(fdr, buf, BUFSIZE);
22     if (ret == -1) {
23         return;
24     }
25     if (ret == 0) {
26         exit(0);
27     }
28     write(1, "\033[31m", 5);
29     write(1, buf, ret);
30     write(1, "\033[0m", 4);
31 }
32 
33 int main(void)
34 {
35     int ret;
36     char buf[BUFSIZE];
37     long flags;
38 
39     signal(SIGIO, handler);
40 
41     fdr = open("f1", O_RDONLY);
42     if (fdr == -1) {
43         perror("f1");
44         goto open_fdr_err;
45     }
46 
47     fdw = open("f2", O_WRONLY);
48     if (fdw == -1) {
49         perror("f2");
50                 goto open_fdw_err;
51     }
52 
53     flags = fcntl(fdr, F_GETFL);
54     flags |= O_ASYNC;
55     fcntl(fdr, F_SETFL, flags);
56 
57     fcntl(fdr, F_SETOWN, getpid());
58 
59     while (1) {
60         ret = read(0, buf, BUFSIZE);
61         if (ret == -1) {
62             if (errno == EINTR) {
63                 continue;
64             }
65             perror("read()");
66             break;
67         }
68         if (ret == 0) {
69             break;
70         }
71         write(fdw, buf, ret);
72     }
73 
74     close(fdw);
75     close(fdr);
76 
77     return 0;
78 
79 
80     close(fdw);
81 open_fdw_err:
82     close(fdr);
83 open_fdr_err:
84     return 1;
85 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-30
  • 2021-05-30
  • 2021-03-31
  • 2022-12-23
  • 2021-10-10
  • 2021-07-02
猜你喜欢
  • 2021-11-29
  • 2021-09-04
  • 2021-04-02
  • 2021-08-07
  • 2021-07-21
  • 2021-10-08
  • 2022-02-04
相关资源
相似解决方案