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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² QNX/Neutrino 2. Руководство ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² QNX Realtime PlatformΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 55

Автор Π ΠΎΠ± ΠšΡ‘Ρ€Ρ‚Π΅Π½

  _RESMGR_IO_NFUNCS, &io_func);

 iofunc_attr_init(&attr, S_IFNAM | 0666, 0, 0);

 // Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ прСфикс Π² пространствС ΠΈΠΌΠ΅Π½ ΠΏΡƒΡ‚Π΅ΠΉ

 if (resmgr_attach(dpp, &resmgr_attr,

  "/dev/mynull", _FTYPE_ANY,

  0, &connect_func, &io_func, &attr) == -1) {

  perror("Ошибка resmgr_attach\n");

  exit(EXIT_FAILURE);

 }

 ctp = resmgr_context_alloc(dpp);

 // Π–Π΄Π°Ρ‚ΡŒ сообщСний Π² Π²Π΅Ρ‡Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅

 while (1) (

  if ((ctp = resmgr_block(ctp)) == NULL) {

   perror("Ошибка resmgr_block\n");

   exit(EXIT_FAILURE);

  }

  resmgr_handler(ctp);

 }

}

И всС! ΠŸΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ администратор рСсурса /dev/null рСализуСтся всСго нСсколькими Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ!

Если Π±Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ администратор (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ stat(), chown(), chmod(), ΠΈ Ρ‚.Π΄.) «с нуля», Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΏΠ°Ρ‚ΠΈΡ‚ΡŒ сотни, Ссли Π½Π΅ тысячи строк Π‘ΠΈ-ΠΊΠΎΠ΄Π°.

РСально всС это Π·Π° вас Π΄Π΅Π»Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ знакомства с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² администраторС рСсурсов /dev/null:

dispatch _create()

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ структуру диспСтчСризации; ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для блокирования ΠΏΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΡƒ сообщСния.

iofunc_attr_init()

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ устройством Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΡƒΡŽ запись. ΠœΡ‹ обсудим Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½Ρ‹Π΅ записи Π² подробностях нСсколько ΠΏΠΎΠ·ΠΆΠ΅, Π° Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ Ρ‚Π°ΠΊ: атрибутная запись содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± устройствС, ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ имя устройства имССтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½ΠΎΠΉ записи.

iofunc_func_init()

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π²Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, cfuncs ΠΈ ifuncs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат соотвСтствСнно ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ установлСния соСдинСния ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Π­Ρ‚ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самый «магичСский» Π²Ρ‹Π·ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, привязывая ΠΈΡ… ΠΊ структурам Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний установлСния соСдинСния ΠΈΠ»ΠΈ сообщСний Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… функциями read(), stat() ΠΈΠ»ΠΈ ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ, Π² администраторС Π½Π΅Ρ‚. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит для всСх сообщСний Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ POSIX-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· функция iofunc_func_init()-Ρ‚ΠΎ ΠΈ привязываСт ΠΈΡ… ΠΊ Π΄Π²ΡƒΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ.

resmgr_attach()

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ администратор рСсурса Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСний, ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ администратору процСссов, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° Β«/dev/nullΒ». ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΊ этой Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ ΠΌΡ‹ вСрнСмся нСсколько ΠΏΠΎΠ·ΠΆΠ΅. БСйчас ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ дСскриптор диспСтчСра (dpp), имя ΠΏΡƒΡ‚ΠΈ (строка Β«/dev/nullΒ») ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ установлСния соСдинСния (cfuncs) ΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° (ifuncs).

resmgr_context_alloc()

ВыдСляСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ контСкстный Π±Π»ΠΎΠΊ администратора рСсурса. ΠœΡ‹ рассмотрим этот Π±Π»ΠΎΠΊ Π² подробностях нСсколько ΠΏΠΎΠ·ΠΆΠ΅, Π° Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ β€” ΠΎΠ½ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΎΡ‚Π½ΠΎΡΡΡ‰ΡƒΡŽΡΡ ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ.

resmgr_block()

Π­Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² администратора рСсурса β€” функция, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ сообщСниС ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

resmgr_handler()

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сообщСниС ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ, для Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вызываСтся эта функция.

Π—Π° кулисами Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° отвСтствСнна Π·Π° прСдоставлСниС основного Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСний:

while (1) {

 // Π—Π΄Π΅ΡΡŒ ΠΆΠ΄Π΅ΠΌ сообщСния

 if ((ctp = resmgr_block(ctp)) == NULL) {

  perror("Unable to resmgr_block\n");

  exit(EXIT_FAILURE);

 }

 // ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС

 resmgr_handler(ctp);

}

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ позволяСт Π²Π°ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ останова Π½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°) Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° осущСствляСт всС магичСскиС манипуляции Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ resmgr_handler(), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎ самоС мСсто, Π³Π΄Π΅ сообщСниС анализируСтся ΠΈ обрабатываСтся Π² соотвСтствии с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ установлСния соСдинСния ΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° состоит ΠΈΠ· Π΄Π²ΡƒΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ β€” Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Β«ΡΡ‹Ρ€ΡƒΡŽΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ администратора рСсурсов, ΠΈ уровня POSIX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ POSIX ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. БСйчас ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ обрисуСм эти Π΄Π²Π° уровня, Π° Π·Π°Ρ‚Π΅ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° администратора рСсурсов» рассмотрим всС Π² подробностях.

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ

Π‘Π°ΠΌΡ‹ΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ состоит ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Β«resmgr_Β». Π­Ρ‚ΠΎΡ‚ класс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ относится ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ функционирования администратора рСсурсов.

Π—Π΄Π΅ΡΡŒ я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ описаниС этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ доступными ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ я ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡŽ вас ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ QSSL Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… свСдСний ΠΎΠ± этих функциях.

К функциям Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ уровня относятся:

resmgr_msgreadv() ΠΈ resmgr_msgread()

Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· адрСсного пространства ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями.

resmgr_msgwritev() ΠΈ resmgr_msgwrite()

Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² адрСсноС пространство ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями.

resmgr_open_bind()

БвязываСт контСкст с запросом Π½Π° установлСниС соСдинСния, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠΌ ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ клиСнтской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ контСкст Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

resmgr_attach()

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΈ связываСт Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ имя ΠΏΡƒΡ‚ΠΈ, дСскриптор диспСтчСра, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ установлСния соСдинСния, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ сообщСниС администратору процСссов для рСгистрации ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡƒΡ‚ΠΈ (прСфикса).

resmgr_detach()

ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ resmgr_attach(). Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡƒΡ‚ΠΈ ΠΈ администратором рСсурса.

pulse_attach()

БвязываСт ΠΊΠΎΠ΄ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈΠ΅ΠΌΠ° сообщСний рСализуСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ Β«ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Β» для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠΎΠ².

pulse_detach()

ΠžΡ‚Π²ΡΠ·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ° ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ функциям, пСрСчислСнным Π²Ρ‹ΡˆΠ΅, Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, посвящСнных интСрфСйсу диспСтчСризации.

Одна функция ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ списка заслуТиваСт особого упоминания β€” функция resmgr_open_bind(). Данная функция, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ сообщСниС установлСния соСдинСния (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это происходит Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ клиСнтского Π²Ρ‹Π·ΠΎΠ²Π° open() ΠΈΠ»ΠΈ fopen()), создаСт Π½Π΅ΠΊΡƒΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° сообщСния Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π΅Π΅ Π½Π΅ Π±Ρ‹Ρ‚ администраторС /dev/null? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ POSIX-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, принятыС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, сами Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ для нас эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Если Π±Ρ‹ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ всС сообщСния ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

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

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠ³ΠΎ списка достаточно ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΠΌ ΠΈΡ… обсуТдСниС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅ΠΌ Π΄ΠΎ ΠΈΡ… явного примСнСния.

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ POSIX

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

НаписаниС администратора рСсурсов

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ основы, β€” ΠΊΠ°ΠΊ выглядит ΠΌΠΈΡ€ Π³Π»Π°Π·Π°ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ†Π²Π΅Ρ‚Π΅ Π²ΠΈΠ΄ΠΈΡ‚ всС администратор рСсурсов, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±Π° уровня Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΡΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° дСталях.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹:

β€’ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…;

β€’ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ администратора рСсурсов;

β€’ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… POSIX-уровня;

β€’ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний;

β€’ ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

ΠŸΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅ Β«Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒΒ» β€” Π½Π° Π½Π΅ΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ практичСски всС, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ администратору рСсурсов:

АрхитСктура администратора рСсурсов β€” общая схСма.