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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 14

Автор Майкл ДТонсон

6.2.3. Поиск ΠΈ настройка Π±Π°Π·ΠΎΠ²ΠΎΠΉ систСмной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

БущСствуСт нСсколько ΠΏΠΎΡ€Ρ†ΠΈΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ систСмС, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. НапримСр, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ вСрсия ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠΉ систСмными ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.

БистСмный Π²Ρ‹Π·ΠΎΠ² uname() позволяСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π΅ выполнСния.

#include <sys/utsname.h>


int uname(struct utsname* unameBuf);

Π’ случаС ошибки функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° пСрСдаСтся нСдопустимый ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ unameBuf. ΠŸΡ€ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ структура, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, заполняСтся строками, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹ΠΌΠΈ NULL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ систСму. Π’ Ρ‚Π°Π±Π». 6.1 прСдставлСны Ρ‡Π»Π΅Π½Ρ‹ структуры utsname.


Π’Π°Π±Π»ΠΈΡ†Π° 6.1. Π§Π»Π΅Π½Ρ‹ структуры utsname

Π§Π»Π΅Π½ ОписаниС sysname НазваниС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Linux). release НомСр вСрсии Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ядра. Π­Ρ‚ΠΎ полная вСрсия Π²Ρ€ΠΎΠ΄Π΅ 2.6.2. НомСр ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ выполнял сборку ядра, ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ†ΠΈΡ„Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ большС Ρ‚Ρ€Π΅Ρ…. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… вСрсиях ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ для описания ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… исправлСний, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 2.4.17-23. version Под Linux здСсь содСрТится врСмСнная ΠΌΠ΅Ρ‚ΠΊΠ°, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ врСмя, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ±ΠΈΡ€Π°Π»ΠΎΡΡŒ ядро. machine ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ строка, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Ρ‚ΠΈΠΏ микропроцСссора, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ опСрационная систСма. Для Pentium Pro ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Ρ… ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ i686, для процСссоров класса Alpha β€” alpha, Π° для 64-разрядных процСссоров PowerPC β€” ррс64. nodename Имя хоста ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ хоста Π² Internet. domainname Π”ΠΎΠΌΠ΅Π½ NIS (ΠΈΠ»ΠΈ YP), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ машина.

Π§Π»Π΅Π½ nodename (имя ΡƒΠ·Π»Π°) часто называСтся систСмным ΠΈΠΌΠ΅Π½Π΅ΠΌ хоста (Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° hostname), ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ Π½Π΅ слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Internet-хоста. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… систСмах эти Ρ‡Π»Π΅Π½Ρ‹ Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ стоит. Π’ систСмС с мноТСством Internet-адрСсов Π΅ΡΡ‚ΡŒ мноТСство ΠΈΠΌΠ΅Π½ Internet-хостов, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ имя ΡƒΠ·Π»Π°, поэтому эти ΠΈΠΌΠ΅Π½Π° Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ эквивалСнтными.

Π‘ΠΎΠ»Π΅Π΅ распространСнная ситуация связана с домашними ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Internet-ΠΊΠ°Π½Π°Π»Ρ‹ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΏΠΎΠ»ΠΎΡΠ½ΠΎΠΉ связи. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡ… имя хоста Π² Internet выглядит Π²Ρ€ΠΎΠ΄Π΅ host127-56.raleigh.myisp.com, Π° ΠΈΠΌΠ΅Π½Π° Internet-хостов ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π½Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя ΠΎΡ‚ ΠΌΠΎΠ΄Π΅ΠΌΠ°[6]. Π’Π»Π°Π΄Π΅Π»ΡŒΡ†Ρ‹ этих машин Π΄Π°ΡŽΡ‚ своим ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌ имя ΡƒΠ·Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌ большС нравится, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, loren ΠΈΠ»ΠΈ eleanor, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ относится ΠΊ адрСсам Internet. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ мноТСства машин, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° ΠΎΠ΄Π½ΠΎΠΌ домашнСм шлюзС, всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Internet-адрСс (ΠΈ ΠΎΠ΄Π½ΠΎ имя Internet-хоста), Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π²Ρ€ΠΎΠ΄Π΅ Linux.mynetwork.org ΠΈ freebsd.mynetwork.org, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС Π΅Ρ‰Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Internet-хоста. Π’ связи со всСми Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ имя систСмного ΡƒΠ·Π»Π° являСтся допустимым ΠΈΠΌΠ΅Π½Π΅ΠΌ Internet-хоста для ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π΅ Π²Π΅Ρ€Π½ΠΎ.

Имя ΡƒΠ·Π»Π° систСмы устанавливаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° sethostname()[7], ΠΈ имя Π΄ΠΎΠΌΠ΅Π½Π° NIS (YP)[8] β€” посрСдством систСмного Π²Ρ‹Π·ΠΎΠ²Π° setdomainname().

#include <unistd.h>


int sethostname(const char * name, size_t len);

int setdomainname(const char * name, size_t len);

Оба этих систСмных Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строку (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΡƒΡŽΡΡ NULL), которая содСрТит подходящСС имя, ΠΈ цСлочислСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки.

6.3. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ скомпилированы с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ glibc ΠΈ привязанныС ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Π΅ вСрсий, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ с Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌΠΈ вСрсиями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π­Ρ‚Π° обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ программисту Π½Π΅ придСтся ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ свои прилоТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° новая вСрсия glibc.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ практичСскиС ограничСния для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, смСшиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий glibc Π² ΠΎΠ΄Π½ΠΎΠΌ исполняСмом Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚Π°ΠΊΠΎΠΉ совмСстимости Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ прСдпринимаСтся. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это касаСтся динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ статичСски связанных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандартныС возмоТности glibc. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ зависит ΠΎΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ошибок ΠΈΠ»ΠΈ основано Π½Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· вСрсий glibc, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΌΠΈ вСрсиями этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠ΅ΠΌΠΎΠ΅ с ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌΠΈ символами glibc (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ прСфикс Π°_), Ρ‚Π°ΠΊΠΆΠ΅ вряд Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹ΠΌΠΈ вСрсиями glibc.

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ поддСрТиваСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° задСйствованы символы, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для соотвСтствия стандартам вСрсий. Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ glibc хотят внСсти нСсовмСстимоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² glibc, ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΠΈΡˆΡƒΡ‚ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ интСрфСйса ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ старым Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии glibc. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΠΎ сСмантикС, сигнатурС ΠΈΠ»ΠΈ ΠΈ Ρ‚Π΅ΠΌ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ) ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ Π΅Π³ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ вСрсии glibc. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, построСнныС Π½Π° Π±Π°Π·Π΅ старой вСрсии glibc, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ старый интСрфСйс, Π° прилоТСния, построСнныС Π½Π° основС Π½ΠΎΠ²ΠΎΠΉ вСрсии β€” Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½ΠΎΠΌΠ΅Ρ€ вСрсии Π² имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ позволяя мноТСству Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий Π±Ρ‹Ρ‚ΡŒ установлСнными ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. НапримСр, ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ GTK+ 1.2 ΠΈ GTK+ 2.0 ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ установлСны Π² ΠΎΠ΄Π½ΠΎΠΉ систСмС, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ со своим собствСнным Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΡƒΡ‚Π΅ΠΌ встраивания Π² ΠΏΡƒΡ‚ΡŒ ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠΌΠ΅Π½ΠΈ вСрсии.

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

Π“Π»Π°Π²Π° 7

БрСдства ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ использования памяти

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π‘ бСсспорно являСтся стандартным языком программирования Π² систСмах Linux, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ряд особСнностСй, Π½Π΅ Π΄Π°ΡŽΡ‰ΠΈΡ… программистам возмоТности ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½Π΅ содСрТащий Ρ‚ΠΎΠ½ΠΊΠΈΡ… ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ впослСдствии ΠΎΡ‡Π΅Π½ΡŒ слоТно ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ. Π£Ρ‚Π΅Ρ‡ΠΊΠΈ памяти (ΠΊΠΎΠ³Π΄Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, выдСлСнная с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc(), Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ освобоТдаСтся посрСдством free()) ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запись Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива) β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹Π΅ для обнаруТСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ошибки. НСдогрузка Π±ΡƒΡ„Π΅Ρ€Π° (Π²Ρ€ΠΎΠ΄Π΅ записи ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ массива) β€” ΠΌΠ΅Π½Π΅Π΅ распространСнноС, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ тяТСлоС для отслСТивания явлСниС. Π’ этой Π³Π»Π°Π²Π΅ прСдставлСны нСсколько срСдств ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ упомянутых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

7.1. Код, содСрТащий ошибки

 1: / * broken.с* /

 2:

 3: #include <stdlib.h>

 4: #include <stdio.h>

 5: #include <string.h>

 6:

 7: char global[5];

 8:

 9: int broken(void){

10:  char *dyn;

11:  char local[5];

12:

13:  /* Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ */

14:  dyn = malloc(5);

15:  strcpy(dyn, "12345");

16:  printf ("1: %s\n", dyn);

17:  free(dyn);

18:

19:  /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ изрядно */

20:  dyn = malloc(5);

21:  strcpy(dyn, "12345678");

22:  printf("2: %s\n", dyn);

23:

24:  /* ΠŸΡ€ΠΎΠΉΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc локального Π±ΡƒΡ„Π΅Ρ€Π° */

25:  * (dyn-1) ='\0';

26:  printf ("3: %s\n", dyn);

27:  /* ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ освобоТдСн! */

28:

29:  /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΡΡ послС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ local */