Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 153

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

   fprintf(stderr, "Server error, FIFO open failed\n");

  }

  return(0);

 }

 read_bytes = read(server_fd, rec_ptr, sizeof(*rec_ptr));

}

if (read_bytes == sizeof(*rec_ptr)) return_code = 1;

Π‘Π΅Ρ€Π²Π΅Ρ€ β€” это СдинствСнный процСсс, способный ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ примСняСт свой ΠΊΠ°Π½Π°Π» для получСния ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ², адрСсованных Π΅ΠΌΡƒ, сСрвСр, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы β€” это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ рСсурс, сСрвСр ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ клиСнтский ΠΊΠ°Π½Π°Π» для записи Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ клиСнтского ΠΊΠ°Π½Π°Π»Π°, запись Π² Π½Π΅Π³ΠΎ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Когда Π²Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ многочислСнныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ мноТСство ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ снова Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π».

ΠŸΡ€ΠΎΠΊΠ»Π°Π΄ΠΊΠ° ΠΊΠ°Π½Π°Π»ΠΎΠ²

1. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

int start_resp_to_client(const message_db_t mess_to_send) {

#if DEBUG_TRACE

 printf("%d :- start_resp_to_client()\n", getpid());

#endif

 (void)sprintf(client_pipe_name, CLIENT_PIPE,

  mess_to_send.client_pid);

 if ((client_fd = open(client_pipe_name, O_WRONLY)) == -1) return(0);

 return(1);

}

2. Π’сС сообщСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ клиСнтскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ сообщСниС, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅.

int send_resp_to_client(const message_db_t mess_to_send) {

 int write_bytes;

#if DEBUG_TRACE

 printf("%d :- send_resp_to_client()\n", getpid());

#endif

 if (client_fd == -1) return(0);

 write_bytes = write(client_fd, &mess_to_send, sizeof(mess_to_send));

 if (write_bytes != sizeof(mess_to_send)) return(0);

 return(1);

}

3. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ клиСнтский ΠΊΠ°Π½Π°Π».

void end resp_to_client(void) {

#if DEBUG_TFACE

 printf("%d :- end_resp_to_client()\n", getpid());

#endif

 if (client_fd != -1) {

  (void)close(сlient_fd);

  client_fd = -1;

 }

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π”ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ сСрвСру β€” клиСнтскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ pipe_imp.c. Они ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° сСрвСрныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠ½Ρ‚Ρ€ΠΈΠ³ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ send_mess_to_server.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

1. ΠŸΠΎΡΠ»Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ доступности сСрвСра функция client_starting ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Π½Π°Π» клиСнтской стороны.

int client_starting(void) {

#if DEBUG_TFACE

 printf("%d client_starting\n", getpid());

#endif

 mypid = getpid();

 if ((server_fd = open(SERVER_PIPE, O_WRONLY)) == -1) {

  fprintf(stderr, "Server not running\n");

  return(0);

 }

 (void)sprintf(client pipe name, CLIENT_PIPE, mypid);

 (void)unlink(client_pipe_name);

 if (mkfifo(client_pipe_name, 0777) == -1) {

  fprintf(stderr, "Unable to create client pipe %s\n", client_pipe_name);

  return(0);

 }

 return(1);

}

2. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ client_ending Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы ΠΈ удаляСт Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π».

void client_ending(void) {

#if DEBUG_TRACE

 printf("%d client_ending()\n", getpid());

#endif

 if (client_write_fd != -1) (void)close(client_write_fd);

 if (client_fd != -1) (void)close(client_fd);

 if (server_fd != -1) (void)close(server_fd);

 (void)unlink(client_pipe_name);

}

3. Ѐункция send_mess_to_server ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ запрос Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π» сСрвСра.

int send_mess_to_server(message_db_t mess_to_send) {

 int write_bytes;

#if DEBUG_TRACE

 printf("%d send_mess_to_server()\n", getpid());

#endif

 if (server_fd == -1) return(0);

 mess_to_send.client_pid = mypid;

 write_bytes = write(server_fd, &mess_to_send, sizeof(mess_to_send));

 if (write_bytes != sizeof(mess_to_send)) return(0);

 return(1);

}

Как ΠΈ Π² сСрвСрных функциях, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π°Π·Π°Π΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΡ‚ сСрвСра с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… мноТСствСнныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поисков.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² с сСрвСра

1. Π”анная клиСнтская функция запускаСтся для оТидания ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра. Она ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΊΠ°Π½Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записи. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

int start_resp_from_server(void) {

#if DEBUG_TRACE

 printf("%d :- start_resp_from_server()\n", getpid());

#endif

 if (client_pipe_name[0] == '\0') return(0);

 if (client_fd != -1) return(1);

 client_fd = open(client_pipe_name, O_RDONLY);

 if (client_fd != -1) {

  client_write_fd = open(client_pipe_name, O_WRONLY);

  if (client_write_fd != -1) return(1);

  (void)close(client_fd);

  client_fd = -1;

 }

 return(0);

}

2. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° основная опСрация read, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ с сСрвСра ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ элСмСнты Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

int read_resp_from_server(message_db_t *rec_ptr) {

 int read_bytes;

 int return_code = 0;

#if DEBUG_TRACE

 printf("%d :- reader_resp_from_server()\n", getpid());

 #endif

 if (!rec_ptr) return(0);

 if (client_fd = -1) return(0);

 read_bytes = read(client_fd, rec_ptr, sizeof(*rec_ptr));

 if (read_bytes = sizeof(*rec_ptr)) return_code = 1;

 return(return_code);

}

3. Π˜ Π² Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° клиСнтская функция, ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‰Π°Ρ ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра.

void end_resp_from_server(void) {

#if DEBUG_TRACE

 printf("%d :- end_resp_from_server()\n", getpid());

#endif

 /* Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π° эта функция пустая */

}

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² open ΠΊΠ°Π½Π°Π»Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для записи Π² start_resp_from_server

client_write_fd = open(client_pipe_name, O_WRONLY);

примСняСтся для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ситуации Π³ΠΎΠ½ΠΎΠΊ, ΠΊΠΎΠ³Π΄Π° сСрвСру Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ быстро ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° нСсколько запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°,

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ стало понятнСС, рассмотрим Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ событий:

1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΈΡˆΠ΅Ρ‚ запрос ΠΊ сСрвСру.

2. Π‘Π΅Ρ€Π²Π΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ запрос, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ отправляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚, Π½ΠΎ приостанавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ успССт Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

3. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» для чтСния, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ свой ΠΊΠ°Π½Π°Π».

4. Π”Π°Π»Π΅Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ посылаСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ клиСнтский ΠΊΠ°Π½Π°Π» для чтСния.

5. Π‘Π΅Ρ€Π²Π΅Ρ€ возобновляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ, закрывая свой ΠΊΠΎΠ½Π΅Ρ† клиСнтского ΠΊΠ°Π½Π°Π»Π°.

К соТалСнию, Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° свой ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ запрос, Π½ΠΎ read Π²Π΅Ρ€Π½Π΅Ρ‚ 0 Π±Π°ΠΉΡ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π» клиСнтский ΠΊΠ°Π½Π°Π» для записи.

Π Π°Π·Ρ€Π΅ΡˆΠΈΠ² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Π½Π°Π» ΠΊΠ°ΠΊ для чтСния, Ρ‚Π°ΠΊ ΠΈ для записи, ΠΈ устранив Ρ‚Π΅ΠΌ самым Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ открытия ΠΊΠ°Π½Π°Π»Π°, Π²Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ситуации Π³ΠΎΠ½ΠΎΠΊ. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ Π² ΠΊΠ°Π½Π°Π», поэтому Π½Π΅Ρ‚ опасности считывания ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

РСзюмС, ΠΊΠ°ΡΠ°ΡŽΡ‰Π΅Π΅ΡΡ прилоТСния

Π’Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков, Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ части, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСзависимо ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ интСрфСйс Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎΠΌΡƒ элСмСнту прилоТСния Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ рСсурсы. Если ΠΏΠΎΠΉΡ‚ΠΈ Ρ‡ΡƒΡ‚ΡŒ дальшС, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π½Π° сСтСвой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ для сСрвСра Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π³Π»Π°Π²Π΅ 15 Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ большС ΠΎΠ± ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ сСти.

РСзюмС 

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ рассмотрСли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°Π½Π°Π»ΠΎΠ². Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ познакомились с Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ popen ΠΈΠ»ΠΈ pipe, ΠΈ посмотрСли, ΠΊΠ°ΠΊ, примСняя ΠΊΠ°Π½Π°Π» ΠΈ Π²Ρ‹Π·ΠΎΠ² dup, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² стандартный Π²Π²ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π”Π°Π»Π΅Π΅ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсвязанными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚- сСрвСрного прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°Π½Π°Π»Ρ‹ FIFO для обСспСчСния Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синхронизации процСссов, Π½ΠΎ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. 

Π“Π»Π°Π²Π° 14

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ обсудим Π½Π°Π±ΠΎΡ€ срСдств, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… взаимодСйствиС процСссов ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² вСрсии ОБ UNIX AT&T System V.2. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС эти срСдства появились Π² ΠΎΠ΄Π½ΠΎΠΌ выпускС систСмы ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсом, ΠΈΡ… часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ срСдствами IPC (Inter-Process Communication, взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами) ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ System V IPC. Как Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ СдинствСнный способ установлСния связи ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "System V IPC" ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся для обозначСния ΠΈΠΌΠ΅Π½Π½ΠΎ этих ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… срСдств.

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

β–‘ ΡΠ΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹ для управлСния доступом ΠΊ рСсурсам;

β–‘ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ для эффСктивного использования ΠΎΠ±Ρ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ;