Π ΠΈΡ. 4.12. ΠΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²Π΅Ρ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²
Π‘Π΅ΡΠ²Π΅Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°Π½Π°Π» Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΏΠΎΠ»Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ /tmp/fifΠΎ.serv. ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΎΠ½ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π», ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π² ΠΊΠ°Π½Π°Π» ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΏΡΠΈΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΡΡΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.10 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 4.10. Π‘Π΅ΡΠ²Π΅Ρ, ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°Π½Π°Π»Π° FIFO//fifocliserv/mainserver.Ρ
1 #include "fifo.h"
2 void server(int, int);
3 int
4 main(int argc, char **argv)
5 {
6 int readfifo, writefifo, dummyfd, fd;
7 char *ptr, buff[MAXLINE], fifoname[MAXLINE];
8 pid_t pid;
9 ssize_t n;
10 /* ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ FIFO ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠΠ, Π΅ΡΠ»ΠΈ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ */
11 if ((mkfifo(SERV_FIFO, FILE_MODE) < 0) && (errno != EEXIST))
12 err_sys("can't create %s", SERV_FIFO);
13 /* ΠΎΡΠΊΡΡΡΠΈΠ΅ FIFO-cepΠ²epa Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ */
14 readfifo = Open(SERV_FIFO, O_RDONLY, 0);
15 dummyfd = Open(SERV_FIFO, O_WRONLY, 0); /* Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ */
16 while ((n = Readline(readfifo, buff, MAXLINE)) > 0) {
17 if (buff[n-1] == '\n')
18 n--; /* delete newline from readline() */
19 buff[n] = '\0'; /* ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ, Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌΠΎΠ΅ 0 */
20 if ((ptr = strchr(buff, ' ')) == NULL) {
21 err_msg("bogus request: ls", buff);
22 continue;
23 }
24 *ptr++ = 0; /* ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° */
25 pid = atol(buff);
26 snprintf(fifoname, sizeof(fifoname), "/tmp/fifo.%ld", (long) pid);
27 if ( (writefifo = open(fifoname, O_WRONLY, 0)) < 0) {
28 err_msg("cannot open: ls", fifoname);
29 continue;
30 }
31 if ((fd = open(ptr, O_RDONLY)) < 0) {
32 /* ΠΎΡΠΈΠ±ΠΊΠ°, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ */
33 snprintf(buff + n, sizeof(buff) β n, ": can't open, %s\n",
34 strerror(errno));
35 n = strlen(ptr);
36 Write(writefifo, ptr, n);
37 Close(writefifo);
38
39 } else {
40 /* ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ ΠΎΡΠΊΡΡΡΠΈΠ΅, ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ» */
41 while ((n = Read(fd, buff, MAXLINE)) > 0)
42 Write(writefifo, buff, n);
43 Close(fd);
44 Close(writefifo);
45 }
46 }
47 }
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΎΡΠΊΡΡΡΠΈΠ΅ Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ10-15 Π‘Π΅ΡΠ²Π΅Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΊΠ°Π½Π°Π» FIFO Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°Π½Π°Π» ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΊΠ°Π½Π°Π» ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ: ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, Π° Π²ΡΠΎΡΠΎΠΉ β ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ readfifo ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ dummyfd Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎΠ²ΡΠ΅. ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΊΠ°Π½Π°Π» Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ, Π²ΠΈΠ΄Π½Π° ΠΈΠ· ΡΠ°Π±Π». 4.1. ΠΡΠ»ΠΈ ΠΊΠ°Π½Π°Π» Π½Π΅ ΠΎΡΠΊΡΡΡΡ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΡΠΎ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΠΎΡ ΠΊΠ°Π½Π°Π» Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΡΡΠΎΡΠ°ΡΡΡΡ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ 0, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΠΊΠ°Π½Π°Π» Π²ΡΠ·ΠΎΠ²ΠΎΠΌ close, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΡΠΊΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΡΠ»Π°Π³ΠΎΠΌ O_RDONLY, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ Π±Ρ ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΠΌΠΎΠ½Π° Π΄ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡ ΠΆΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΎΡΠΊΡΡΡΡΠΉ Π½Π° Π·Π°ΠΏΠΈΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ read Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ read, ΠΎΠΆΠΈΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΎΡ ΡΡΡΠΊ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² open Π΄Π»Ρ ΠΊΠ°Π½Π°Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΡΠ·ΠΎΠ² open (Ρ ΡΠ»Π°Π³ΠΎΠΌ O_RDONLY) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΎΡΠΊΡΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΊΠ°Π½Π°Π» ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π·Π°ΠΏΠΈΡΡ (ΡΠΌ. ΡΠ°Π±Π». 4.1). ΠΡΠΎΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² open (Ρ ΡΠ»Π°Π³ΠΎΠΌ O_WRONLY) Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°Π½Π°Π» ΡΠΆΠ΅ ΠΎΡΠΊΡΡΡ Π½Π° Π·Π°ΠΏΠΈΡΡ.
Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°16 ΠΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΡΠΎΠ±Π΅Π»Π° ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ readline (ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² [24, Ρ.79]).
ΠΠ½Π°Π»ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°17-26 Π‘ΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ readline, ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ. ΠΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π±ΡΡΠ΅Ρ Π±ΡΠ» Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π±ΡΠ» ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, Π»ΠΈΠ±ΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π²Π΅Π΄Π΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π½Π΅ Π±ΡΠ»Π° Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΡΡΠΈΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ strchr Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΎΠ±Π΅Π» Π² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π° ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ. ΠΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠ°Π½Π°Π»Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΈ ΡΡΠΎΡ ΠΊΠ°Π½Π°Π» ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π° Π·Π°ΠΏΠΈΡΡ.
ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π΅Π³ΠΎ Π² FIFO ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
27-44 ΠΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΏpoΠ³ΡaΠΌΠΌΡ-cepΠ²epa Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ server ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° 4.3. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»; Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° β ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎΡΡΡΠ»Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΉ. ΠΡΠ»ΠΈ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠΊΡΡΡΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Β«ΠΊΠΎΠ½Π΅ΡΒ» (Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ) ΠΊΠ°Π½Π°Π»Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΊΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ close, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ read Π²Π΅ΡΠ½ΡΠ»Π° ΠΏpoΠ³ΡaΠΌΠΌe-ΠΊΠ»ΠΈeΠ½Ρy Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 (ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°). Π‘Π΅ΡΠ²Π΅Ρ Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ°; ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°. Π’Π΅ΠΊΡΡ ΠΏpoΠ³ΡaΠΌΠΌΡ-ΠΊΠ»ΠΈeΠ½Ρa ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.11.
ΠΠΈΡΡΠΈΠ½Π³ 4.11. ΠΠ»ΠΈΠ΅Π½Ρ, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ (Π»ΠΈΡΡΠΈΠ½Π³ 4.10) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°Π½Π°Π»Π° FIFO//fifocliserv/mainclient.Ρ
1 #include "fifo.h"
2 int
3 main(int argc, char **argv)
4 {
5 int readfifo, writefifo;
6 size_t len;
7 ssize_t n;
8 char *ptr, fifoname[MAXLINE], buff[MAXLINE];
9 pid_t pid;
10 /* ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ FIFO Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΅Π³ΠΎ ΠΈΠΌΡ PID */
11 pid = getpid();
12 snprintf(fifoname, sizeof(fifoname), "/tmp/fifo,%ld", (long) pid):
13 if ((mkfifo(fifoname, FILE_MODE) < 0) && (errno != EEXIST))
14 err_sys("can't create %s", fifoname);
15 /* ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΡΠ΅ΡΠ° PID ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ */
16 snprintf(buff, sizeof(buff), "%ld ", (long) pid);
17 len = strlen(buff);
18 ptr = buff + len;
19 /* ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ */
20 Fgets(ptr, MAXLINE β len, stdin);
21 len = strlen(buff); /* fgets() Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ 0 */
22 /* ΠΎΡΠΊΡΡΡΠΈΠ΅ FIFO ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ PID */
23 writefifo = Open(SERV_FIFO, O_WRONLY, 0);
24 Write(writefifo, buff, len);
25 /* ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ FIFO; Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ */
26 readfifo = Open(fifoname, O_RDONLY; 0);
27 /* ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° IPC, Π·Π°ΠΏΠΈΡΡ Π² stdout */
28 while ((n = Read(readfifo, buff, MAXLINE)) > 0)
29 Write(STDOUT_FILENO, buff, n);
30 Close(readfifo);
31 Unlink(fifoname);
32 exit(0);
33 }
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π°10-14 ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌ ΠΊΠ°Π½Π°Π»Π°.
Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ°15-21 ΠΠ°ΠΏΡΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π΅Π»Π°, ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ. Π‘ΡΡΠΎΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ buff, ΠΏΡΠΈΡΠ΅ΠΌ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°.
ΠΡΠΊΡΡΡΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ°22-24 ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΊΠ°Π½Π°Π» ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π² Π½Π΅Π³ΠΎ ΡΡΡΠΎΠΊΡ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°, Π²ΡΠ·ΠΎΠ² open ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π΅Π»Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌ Π²ΡΠ·ΠΎΠ²Π° open (Ρ ΡΠ»Π°Π³ΠΎΠΌ O_RDONLY).
ΠΡΠΈΠ΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°25-31 ΠΡΠ²Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈ* ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ.
Π‘Π΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΎΠΊΠΎΠ½, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ β Π² Π΄ΡΡΠ³ΠΎΠΌ, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ ΠΈ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π»ΠΈ. ΠΠΈΠΆΠ΅ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ:
solaris % mainclient /etc/shadow ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΌ Π½Π΅Π»ΡΠ·Ρ ΡΠΈΡΠ°ΡΡ
/etc/shadow: can't open. Permission denied
solaris % mainclient /etc/inet/ntp.conf ΡΠ°ΠΉΠ» ΠΈΠ· Π΄Π²ΡΡ ΡΡΡΠΎΠΊ
multicastclient 224.0.1.1
driftfile /etc/inet/ntp.drift
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·Π°ΡΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°Π½Π°Π»Ρ FIFO ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.
solaris % Pid=$$
solaris % mkfifo /tmp/fifo.$Pid
solaris % echo "$Pid /etc/inet/ntp.conf" > /tmp/fifo.serv
solaris % cat < /tmp/fifo.$Pid
multicastclient 224.0.1.1
driftfile /etc/inet/ntp.drift
solaris % rm /tmp/fifo.$Pid
ΠΡ ΠΎΡΡΡΠ»Π°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (echo) ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (cat). ΠΠ΅ΠΆΠ΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΈΡ Π΄Π²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° Π² ΠΊΠ°Π½Π°Π», Π° ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cat, ΡΡΠΎΠ±Ρ ΡΡΠΈΡΠ°ΡΡ ΠΎΡΡΡΠ΄Π° Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΊΠ°Π½Π°Π»Π΅, Ρ ΠΎΡΡ ΠΎΠ½ Π½Π΅ ΠΎΡΠΊΡΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ΅ Π½Π΅ ΡΠ°ΠΊ. ΠΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏpoΠ³ΡaΠΌΠΌΠ½oΠ³o ΠΊΠ°Π½Π°Π»Π° ΠΈΠ»ΠΈ FIFO ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ close Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π² Π½Π΅ΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ, ΡΠ΅ΡΡΡΡΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ, ΡΡΠΈΡΠ°Π² ΡΡΡΠΎΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΎΡΠΊΡΡΡΡ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ (Π½Π°ΡΠ° ΠΊΠΎΠΏΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°) Π΅ΡΠ΅ Π½Π΅ ΠΎΡΠΊΡΡΠ» Π΅Π³ΠΎ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ (Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠ°Π±Π». 4.1). Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° cat Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΏΡΡΡΡ ΠΊΠ°Π½Π°Π» Π±ΡΠ΄Π΅Ρ ΠΎΡΠΊΡΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ. ΠΡΡΠ°ΡΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠ°ΠΊΠ° ΡΠΈΠΏΠ° Β«ΠΎΡΠΊΠ°Π· Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈΒ» (denial-of-service attack), ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.