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

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

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

УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ ΠΈ повторная установка dbm

Π­Ρ‚Π° Π³Π»Π°Π²Π° написана Π² расчСтС Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ вас установлСна рСализация GNU gdbm, укомплСктованная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ совмСстимости с ndbm. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для дистрибутивов Linux, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ придСтся явно ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ с использованиСм ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ndbm.

К соТалСнию, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²

include
ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ слСгка Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… дистрибутивах, поэтому, нСсмотря Π½Π° ΠΈΡ… установку, Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходныС Ρ„Π°ΠΉΠ»Ρ‹ с использованиСм ndbm. НаиболСС частый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… gdbm установлСна ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π΅ΠΆΠΈΠΌ совмСстимости с вСрсиСй ndbm. Дистрибутивы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Red Hat, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π΄Π΅Π»Π°ΡŽΡ‚ это. Π’ этом случаС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

1.Β Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² ваш Ρ„Π°ΠΉΠ» Π½Π° языкС Π‘ Ρ„Π°ΠΉΠ» ndbm.h.

2. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° /usr/include/gdbm с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ

-I/usr/include/gdbm
.

3.Β Π‘ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ gdbm, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ

-lgdbm
.

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, обычная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, принятая Π² Π½ΠΎΠ²Π΅ΠΉΡˆΠΈΡ… вСрсиях дистрибутивов Ubuntu ΠΈ SUSE, β€” устанавливаСтся Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… gdbm, Π½ΠΎ ΠΏΡ€ΠΈ нСобходимости явно Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ndbm, ΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ сначала с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ совмСстимости, Π° Π·Π°Ρ‚Π΅ΠΌ с основной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ. Π’ этом случаС Π½Π°Π΄ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

1. ВмСсто Ρ„Π°ΠΉΠ»Π° ndbm.h Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π² ваш Ρ„Π°ΠΉΠ» Π½Π° Π‘ Ρ„Π°ΠΉΠ» gdbm-ndbrh.h.

2.Β Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° /usr/include/gdbm с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ

-I/usr/include/gdbm
.

3.Β Π‘ΠΊΠΎΠΌΠΏΠΎΠ½ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ совмСстимости gdbm, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ

-lgdbm_compat -lgdbm
.

Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ Makefile ΠΈ Π‘-Ρ„Π°ΠΉΠ»Ρ‹ dbm установлСны с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, принятым ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ содСрТат ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части Π³Π»Π°Π²Ρ‹ ΠΌΡ‹ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² вашСй систСмС ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ndbm β€” характСристика, принятая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ dbm

Как ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° curses, ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠ°ΡΡΡ Π½Π°ΠΌΠΈ Π² Π³Π»Π°Π²Π΅ 6, срСдство dbm состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, которая Π΄ΠΎΠ»ΠΆΠ½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π²ΠΎ врСмя компиляции послСднСй. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° называСтся просто dbm, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСм Π² систСмС Linux Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ GNU, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ с этой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² строкС компиляции ΠΎΠΏΡ†ΠΈΡŽ

-lgdbm
. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€” ndbm.h.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ попытаСмся ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Π΅Π³ΠΎ стараСтся Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… dbm. Когда Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ это, Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dbm.

Основной элСмСнт Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… dbm β€” Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для хранСния, связанный с Π±Π»ΠΎΠΊΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡ для извлСчСния Π΄Π°Π½Π½Ρ‹Ρ…. Π£ всСх Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… dbm Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ хранящСгося Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ индСкс хранящихся Π΄Π°Π½Π½Ρ‹Ρ…. НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок ΠΏΡ€ΠΈ использовании Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ слишком большого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ допускаСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡Π°/Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ 1023 Π±Π°ΠΉΡ‚Π°, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ сущСствуСт, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ оказались Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ, Ρ‡Π΅ΠΌ трСбования, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΊ Π½ΠΈΠΌ.

Для манипулирования этими Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ndbm.h ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ

datum
. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ содСрТимоС этого Ρ‚ΠΈΠΏΠ° зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты:

<b>void *dptr;</b>

<b>size_t dsize</b>

Π—Π΄Π΅ΡΡŒ

datum
β€” Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ typedef. Π’ Ρ„Π°ΠΉΠ»Π΅ ndbm.h Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ dbm, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ собой структуру, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ для доступа ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
FILE
, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ содСрТимоС
dbm typedef
зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Для ссылки Π½Π° Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ использовании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ dbm Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ

datum
, Π·Π°Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
dptr
для указания Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
dsize
, содСрТащий Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…. На хранящиСся Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ индСкс, примСняСмый для доступа ΠΊ Π½ΠΈΠΌ, всСгда Π½ΡƒΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠ°
datum
.

О Ρ‚ΠΈΠΏΠ΅
DBM
Π»ΡƒΡ‡ΡˆΠ΅ всСго Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ± Π°Π½Π°Π»ΠΎΠ³Π΅ Ρ‚ΠΈΠΏΠ°
FILE
. Когда Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… dbm, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π΄Π²Π° физичСских Ρ„Π°ΠΉΠ»Π°: ΠΎΠ΄ΠΈΠ½ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ pag, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ dir. ВозвращаСтся ΠΎΠ΄ΠΈΠ½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ dbm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся для обращСния ΠΊ ΠΎΠ±ΠΎΠΈΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΊΠ°ΠΊ ΠΊ ΠΏΠ°Ρ€Π΅. Π€Π°ΠΉΠ»Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ слСдуСт нСпосрСдствСнно Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π² Π½ΠΈΡ… Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ; ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для доступа Ρ‡Π΅Ρ€Π΅Π· стандартныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ dbm.
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях эти Π΄Π²Π° Ρ„Π°ΠΉΠ»Π° ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹, ΠΈ создаСтся ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… SQL, Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² случаС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… dbm Π½Π΅ сущСствуСт структур Ρ‚Π°Π±Π»ΠΈΡ† ΠΈΠ»ΠΈ столбцов. Π­Ρ‚ΠΈ структуры Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, Ρ‚.ΠΊ. dbm Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° элСмСнтов сохраняСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ описания Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры для Π½ΠΈΡ…. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° dbm Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π»ΠΎΠΊΠ°ΠΌΠΈ нСструктурированных Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ доступа dbm

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ рассказали ΠΎΠ± основах Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ dbm, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ dbm.

<b>#include &lt;ndbm.h&gt;</b>

<b>DBM *dbm_open(const char* filename, int file_open_flags,</b>

<b>Β mode_t file_mode);</b>

<b>int dbm_store(DBM *database_descriptor, datum key, datum content,</b>

<b>Β int store_mode);</b>

<b>datum dbm_fetch(DBM* database descriptor, datum key);</b>

<b>void dbm_close(DBM *database descriptor);</b>

dbm_open

Π­Ρ‚Π° функция примСняСтся для открытия ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ для создания Π½ΠΎΠ²Ρ‹Ρ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. АргумСнт

filename
β€” имя Ρ„Π°ΠΉΠ»Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ dir ΠΈΠ»ΠΈ pag.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

open
, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Π² Π³Π»Π°Π²Π΅ 3. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹
#define
. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ управляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ чтСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, записью Π² Π½Π΅Π΅ ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΈΠΌΠΈ опСрациями. Если создаСтся новая Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ„Π»Π°Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ
O_READ
с
O_CREAT
, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ созданиС Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π°Π΄Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ созданы.

Ѐункция

dbm_open
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ
DBM
. Он примСняСтся Π²ΠΎ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… обращСниях ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ случаС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ возвращаСтся
(DBM*)0
.