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

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

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

Ѐункция dbm_error просто провСряСт Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок, возвращая 0 ΠΏΡ€ΠΈ ΠΈΡ… отсутствии.

dbm_clearerr

Ѐункция dbm_clearerr ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ любой Ρ„Π»Π°Π³ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΉ ситуации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

dbm_firstkey ΠΈ dbm_nextkey

Π­Ρ‚ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вмСстС для просмотра ΠΊΠ»ΡŽΡ‡Π΅ΠΉ всСх элСмСнтов Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° структура Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для просмотра Ρ†ΠΈΠΊΠ»Π°:

DBM *db_ptr;

datum key;

for (key = dbm_firstkey(db_ptr); key.dptr; key = dbm_nextkey(db_ptr));

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.13.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.13. Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» dbm1.с с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ описанных Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ создадитС Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» dbm2.c.

1. Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ копию dbm1.с ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ для рСдактирования. ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ строку #define TEST_DB_FILE.

#unclude <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <fcntl.h>

#include <ndbm.h>

#include <string.h>


#define TEST_DB_FILE "/tmp/dbm2_test"

#define ITEMS_USED 3

2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ внСсти измСнСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽ извлСчСния:

 /* Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ */

 sprintf(key_to_use, "bu%d", 13);

 key_datum.dptr = key_to_use;

 key_datum.dsize = strlen(key_to_use);

 if (dbm_delete(dbm_ptr, key_datum) == 0) {

  printf("Data with key %s deleted\n", key_to_use);

 } else {

  printf("Nothing deleted for key %s\n", key_to_use);

 }

 for (key_datum = dbm_firstkey(dbm_ptr);

  key_datum.dptr;

  key_datum = dbm_nextkey(dbm_ptr)) {

  data_datum = dbm_fetch(dbm_ptr, key_datum);

  if (data_datum.dptr) {

   printf("Data retrieved\n");

   memcpy(&item_retrieved, data_datum.dptr, data_datum.dsize);

   printf("Retrieved item - %s %d %s\n",

    item_retrieved.misc_chars, item_retrieved.any_integer,

    item_retrieved.more_chars);

  } else {

   printf("No data found for key %s\n", key_to_use);

  }

 }

}

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄:

$ ./dbm2

Data with key bu13 deleted

Data retrieved

Retrieved item β€” Third 3 baz

Data retrieved

Retrieved item - First! 47 foo

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, идСнтичная ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, просто сохраняСт Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту, ΠΈ удаляСтС этот элСмСнт ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dbm_firstkey ΠΈ dbm_nextkey для обращСния ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π° ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ для извлСчСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠ»ΡŽΡ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Π½Π΅ ΠΏΠΎ порядку. ΠŸΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅ опрСдСляСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ порядка извлСчСния Π΄Π°Π½Π½Ρ‹Ρ…, это просто способ просмотра всСх элСмСнтов Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…;

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, самоС врСмя ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… dbm Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для хранСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисках, поэтому Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Сю ΠΊΠ°ΠΊ основой Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ОбновлСниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

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

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

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

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса срСдствами Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ curses, Π²Ρ‹ Π²Π΅Ρ€Π½Π΅Ρ‚Π΅ΡΡŒ ΠΊ построчной систСмС. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом, малСнькой ΠΈ простой ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… аспСктах Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π‘ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… dbm Π²Ρ‹ Π½Π΅ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ язык SQL, Π½ΠΎ ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ языка SQL. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этим языком, ΠΌΡ‹ поясним всС опрСдСлСния, Π° Π² Π³Π»Π°Π²Π΅ 8 Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Π½Π΅ΠΌ большС. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описана ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

CREATE TABLE cdc_entry (

 catalog CHAR(30) PRIMARY KEY REFERENCES cdt_entry(catalog),

 title CHAR(70),

 type CHAR(30),

 artist CHAR(70)

);

CREATE TABLE cdt_entry (

 catalog CHAR(30) REFERENCES cdc_entry(catalog),

 track_no INTEGER,

 track_txt CHAR(70),

 PRIMARY KEY(catalog, track_no)

);

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС сообщаСт ΠΈΠΌΠ΅Π½Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠ»Π΅ΠΉ. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ cdc_entry Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π΅ΡΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ столбСц ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° catalog. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ cdt_entry Π½ΠΎΠΌΠ΅Ρ€ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΈ комбинация столбцов catalog ΠΈ track_no ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ структур typedef struct Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ управлСния Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ dbm

БСйчас Π·Π°Π½ΠΎΠ²ΠΎ Π²Ρ‹ создадитС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… dbm для хранСния Π½ΡƒΠΆΠ½ΠΎΠΉ Π²Π°ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² cd_data.h, app_ui.c ΠΈ cd_access.c (упраТнСния 7.14–7.16).

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… Π²Ρ‹ Π½Π΅ Ρ€Π°Π· Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚Π΅ΡΡŒ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… cd_data.h ΠΈ функциями ΠΈΠ· Ρ„Π°ΠΉΠ»Π° cd_access.c. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дистрибутивы Linux Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, примСнСния Π² вашСм Ρ„Π°ΠΉΠ»Π΅ Π½Π° языкС Π‘ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° gdbm-ndbm.h вмСсто Ρ„Π°ΠΉΠ»Π° ndbm.h ΠΈ ΠΎΠΏΡ†ΠΈΠΉ -lgdbm_compat -lgdbm вмСсто просто ΠΎΠΏΡ†ΠΈΠΈ -lgdbm. Если Π² вашСм дистрибутивС Linux Π΄Π΅Π»ΠΎ обстоит ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ внСсти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния Π² Ρ„Π°ΠΉΠ»Ρ‹ access.с ΠΈ Makefile.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.14. Π€Π°ΠΉΠ» cd_data.h

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

1. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков. Π’ Π½Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ структур ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ†, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. НачнитС с задания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΈ Π΄Π²ΡƒΡ… структур: ΠΎΠ΄Π½ΠΎΠΉ для элСмСнта ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ для элСмСнта Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ.

/* Π’Π°Π±Π»ΠΈΡ†Π° catalog */

#define CAT_CAT_LEN 30

#define CAT_TITLE_LEN 70

#define CAT_TYPE_LEN 30

#define CAT_ARTIST_LEN 70

typedef struct {

 char catalog[CAT_CAT_LEN + 1];

 char title[CAT_TITLE_LEN + 1];

 char type [CAT_TYPE_LEN + 1];

 char artist[CAT_ARTIST_LEN + 1];

} cdc_entry;


/* Π’Π°Π±Π»ΠΈΡ†Π° Π΄ΠΎΡ€ΠΎΠΆΠ΅ΠΊ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту Π½Π° Π΄ΠΎΡ€ΠΎΠΆΠΊΡƒ */

#define TRACK_CAT_LEN CAT_CAT_LEN

#define TRACK_TTEXT_LEN 70

typedef struct {

 char catalog[TRACK_CAT_LEN + 1];

 int track_no;

 char track_txt[TRACK_TTEXT_LEN + 1];

} cdt_entry;

2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, имСя структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Π°ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ доступа. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ с прСфиксом cdc_ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для элСмСнтов ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, с прСфиксом cdt_ β€” для элСмСнтов-Π΄ΠΎΡ€ΠΎΠΆΠ΅ΠΊ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, сдСлав содСрТимоС структур пустым.

/* Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ */