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

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

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

int send_mess_to_server(message_db_t mess_to_send) {

 struct msg_passed my_msg;

#if DEBUG_TRACE

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

#endif

 my_msg.real_message = mess_to_send;

 my_msg.msg_key = mess_to_send.client_pid;

 if (msgsnd(serv_qid, (void *)&my_msg, sizeof(mess_to_send) , 0) == -1) {

  perror("Message send failed");

  return(0);

 }

 return(1);

}

4. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния ΠΎΡ‚ сСрвСра ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ID процСсса для получСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщСний, адрСсованных Π΅ΠΌΡƒ, пропуская сообщСния, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ.

int read_resp_from_server(message_db_t *rec_ptr) {

 struct msg_passed mymsg;

#if DEBUG_TRACE

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

#endif

 if (msgrcv(cli_qid, (void *)&my_msg, sizeof(*rec_ptr), getpid(), 0) == -1) {

  return(0);

 }

 *rec_ptr = my_msg.real_message;

 return(1);

}

5. Π”ля сохранСния совмСстимости с Ρ„Π°ΠΉΠ»ΠΎΠΌ pipe_imp.c Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но Π² вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ пустыми. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π»ΠΈ Π² случаС примСнСния ΠΊΠ°Π½Π°Π»ΠΎΠ², большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

int start_resp_to_client(const message_db_t mess_to_send) {

 return(1);

}

void end_resp_to_client(void) {}

int start_resp_from_server(void) {

 return(1);

}

void end_resp_from_server(void) {}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвСр, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ сохранСниС ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ сСрвСру с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сообщСний.

ВсС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, β€” это Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ интСрфСйсныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π³Π»Π°Π²Ρ‹ 11 Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния для использования ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠΎΡ‰ΡŒ этого срСдства IPC, Ρ‚.ΠΊ. Π²Π°ΠΌ трСбуСтся мСньшС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‡Π΅ΠΌ Π² случаС примСнСния ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈ Π΄Π°ΠΆΠ΅ эти Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии прилоТСния.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ состояния IPC

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ для соотвСтствия трСбованиям X/Open этого Π½Π΅ трСбуСтся, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм Linux прСдоставляСт Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ IPC Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ потСрянных срСдств IPC. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ipcs ΠΈ ipcrm, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Один ΠΈΠ· досадных нСдостатков срСдств IPC состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎ написанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡˆΠ°ΡΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ свои рСсурсы IPC (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний) Π΅Ρ‰Π΅ Π΄ΠΎΠ»Π³ΠΎ Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌΠΈ Π² систСмС Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° рассчитываСт Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½ΠΎΠΉ систСмС, Π° Π½Π° самом Π΄Π΅Π»Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ эти Π±Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ рСсурсы. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ состояния (ipcs) ΠΈ удалСния (ipcrm) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ систСму ΠΈ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ ΠΎΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… срСдств IPC.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ состояния сСмафора

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ состояния сСмафоров Π² систСмС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ipcs -s. Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ сСмафоры ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$ ipcs -s

------ Semaphore Arrays ------

key        semid owner perms nsems

0x4d00df1a 768   rick  666   1

Для удалСния сСмафоров, случайно оставлСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ipcrm. Для удалСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ сСмафора ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ (Π² Linux) ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ ipcrm -s 768

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ старых систСмах Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько ΠΈΠ½ΠΎΠΉ синтаксис ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ ipcrm sem 768

Но этот ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π΅Π΄ΠΊΠΎ встрСчаСтся Π² нашС врСмя. Π€ΠΎΡ€ΠΌΠ°Ρ‚, подходящий для вашСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы, ΠΈΡ‰ΠΈΡ‚Π΅ Π½Π° страницах ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ справочного руководства.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ состояния совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти

МногиС систСмы ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для доступа Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ свСдСниям ΠΎ сСмафорах, Π½ΠΎ ΠΈ ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти. К Π½ΠΈΠΌ относятся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ipcs -m ΠΈ ipcrm -m <id> (ΠΈΠ»ΠΈ ipcrm shm <id>).

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ipcs -m:

$ ipcs -m

------ Shared Memory Segments ------

key        shmid owner perms bytes nattch status

0x00000000 384   rick  666   4096  2      dest

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½ СдинствСнный сСгмСнт совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти объСмом 4 ΠšΠ±Π°ΠΉΡ‚, присоСдинСнный ΠΊ Π΄Π²ΡƒΠΌ процСссам.

Команда ipcrm -m <id> позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Она Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ состояния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний

Для ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ сообщСний ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ipcs -q ΠΈ ipcrm -q <id> (ΠΈΠ»ΠΈ ipcrm msg <id>).

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ipcs -q:

$ ipcs -q

------ Message Queues ------

key        msqid owner perms used-bytes messages

0x000004d2 3384  rick  666   2048       2

Π’ Π½Π΅ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний Π΄Π²Π° сообщСния ΠΎΠ±Ρ‰ΠΈΠΌ объСмом 2048 Π±Π°ΠΉΡ‚ΠΎΠ². Команда ipcrm -q <id> позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний.

РСзюмС

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ познакомились с трСмя разновидностями срСдств взаимосвязи процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² ОБ UNIX System V.2 ΠΈ Π±Ρ‹Π»ΠΈ доступны Π² систСмС Linux, начиная с Ρ€Π°Π½Π½ΠΈΡ… вСрсий Π΅Π΅ дистрибутивов. Π’Ρ‹ рассмотрСли ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠΈ слоТныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΈ, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ поняли ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈΡ… функционирования, ΠΎΡ†Π΅Π½ΠΈΠ»ΠΈ обСспСчиваСмоС ΠΈΠΌΠΈ эффСктивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для удовлСтворСния ΠΌΠ½ΠΎΠ³ΠΈΡ… потрСбностСй мСТпроцСссного взаимодСйствия. 

Π“Π»Π°Π²Π° 15

Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹

Π’ этой Π³Π»Π°Π²Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ способом взаимодСйствия процСссов, сущСствСнно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсуТдали Π² Π³Π»Π°Π²Π°Ρ… 13 ΠΈ 14. Π”ΠΎ настоящСго ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° всС рассматриваСмыС Π½Π°ΠΌΠΈ срСдства ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… рСсурсах ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. РСсурсы ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ: ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, сСгмСнтами совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти ΠΈΠ»ΠΈ очСрСдями сообщСний, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠΎΠ³Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ процСссы, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС.

Π’ Π²Π΅Ρ€ΡΠΈΡŽ ОБ Berkeley UNIX Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ срСдство ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” интСрфСйс сокСтов, β€” ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π°, ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠ΅ΠΉΡΡ Π² Π³Π»Π°Π²Π΅ 13. Π’ систСмах Linux Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ интСрфСйсы сокСтов.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ сокСты Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π»Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ взаимодСйствиС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ сСти. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сокСты для взаимосвязи с процСссом Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ сущСствованиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных систСм, распрСдСлСнных Π² сСти. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ сокСты.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, интСрфСйс сокСтов стал доступСн Π² ОБ Windows благодаря общСдоступной спСцификации Windows Sockets ΠΈΠ»ΠΈ WinSock. БСрвисы сокСтов Π² ОБ Windows ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ систСмным Ρ„Π°ΠΉΠ»ΠΎΠΌ Winsock.dll. Π‘Ρ‚Π°Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows ΠΌΠΎΠ³ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ сСти с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Linux ΠΈ UNIX ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, рСализуя, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрныС систСмы. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс для WinSock Π½Π΅ совпадаСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ с интСрфСйсом сокСтов Π² UNIX, Π² основС Π΅Π³ΠΎ Π»Π΅ΠΆΠ°Ρ‚ Ρ‚Π΅ ΠΆΠ΅ сокСты.

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

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΡ‹ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

β–‘ ΠΊΠ°ΠΊ дСйствуСт соСдинСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокСтов;

β–‘ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сокСтов, адрСса ΠΈ ΠΎΠ±ΠΌΠ΅Π½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ;

β–‘ ΡΠ΅Ρ‚Свая информация ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Π΄Π΅ΠΌΠΎΠ½ (inetd/xinetd);

β–‘ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ сСрвСры.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сокСт?

Π‘ΠΎΠΊΠ΅Ρ‚ β€” это срСдство связи, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрныС систСмы для локального, Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС, ΠΈΠ»ΠΈ сСтСвого использования. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ОБ Linux, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ обслуТиваниС Web-страниц, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ сСтСвыС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ rlogin, прСдназначСнная для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ рСгистрации, ΠΈ ftp, примСняСмая для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сокСты для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π‘ΠΎΠΊΠ΅Ρ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΊΠ°Π½Π°Π»Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°ΡŽΡ‚ явноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ сокСтов позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ мноТСство ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², присоСдинСнных ΠΊ СдинствСнному сСрвСру.

БоСдинСния Π½Π° Π±Π°Π·Π΅ сокСтов

БоСдинСния Π½Π° Π±Π°Π·Π΅ сокСтов ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹Π΅ Π·Π²ΠΎΠ½ΠΊΠΈ Π² ΡƒΡ‡Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ поступаСт Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ Π½Π° Π½Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π°Ρ€ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΎΠΉ, Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π» (сСрвСрный процСсс) ΠΈ ΠΎΡ‚Ρ‚ΡƒΠ΄Π° ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ сотруднику (сокСт сСрвСра). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ входящий Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚) направляСтся ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΌΠΈ Π·Π²ΠΎΠ½ΠΊΠ°ΠΌΠΈ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ установку соСдинСний с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокСтов Π² систСмах Linux, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π΅Π΄ΡƒΡ‚ сСбя Π² прилоТСниях сокСтов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… соСдинСния.