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

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

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

 res = mysql_query(&my_cormection, qs);

 if (res) {

  fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

 } else {

  res_ptr = mysql_store_result(&my_connection);

  if (res_ptr) {

   if (mysql_num_rows(res_ptr) > 0) {

    if (mysqlrow = mysql_fetch_row(res_ptr)) {

     sscanf(mysqlrow[0], "%d", &dest->artist_id);

     sscanf(mysqlrow[1], "%d", &dest->cd_id);

     strcpy(dest->artist_name, mysqlrow[2]);

     strcpy(dest->title, mysqlrow[3]);

     strcpy(dest->catalogue, mysqlrow[4]);

    }

   }

   mysql_free_result(res_ptr);

  }

 }

 if (dest->artist_id != -1) return 1;

 return 0;

} /* get_cd */

Π”Π°Π»Π΅Π΅ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ…. Π’ SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ORDER BY, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ Π² подходящСй ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. И ΠΎΠΏΡΡ‚ΡŒ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π‘Π£Π Π‘Π” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ‡Π΅ΠΌ Ссли Π±Ρ‹ Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π΄ΠΎΡ€ΠΎΠΆΠΊΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС, Π° Π·Π°Ρ‚Π΅ΠΌ написали собствСнный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для ΠΈΡ… сортировки.

int get_cd_tracks(int cd_id, struct current_tracks_st *dest) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 int i = 0, num_tracks = 0;

 if (!dbconnected) return 0;

 memset(dest, 0, sizeof(*dest));

 dest->cd_id = -1;

 sprintf(qs, "SELECT track_id, title FROM track WHERE track.cd_id = %d \

  ORDER BY track_id", cd_id);

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

 } else {

  res_ptr = mysql_store_result(&my_connection);

  if (res_ptr) {

   if ((num_tracks = mysql_num_rows(res_ptr)) > 0) {

    while (mysqlrow = mysql_fetch_row(res_ptr)) {

     strcpy(dest->track[i], mysqlrow[1]);

     i++;

    }

    dest->cd_id = cd_id;

   }

   mysql_free_result(res_ptr);

  }

 }

 return num_tracks;

} /* get_cd_tracks */

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

int find_cds(char *search_str, struct cd_search_st *dest) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[500];

 int i = 0;

 char ss[250];

 int num_rows = 0;

 if (!dbconnected) return 0;

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ структуру, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ Π΅Π΅ ΠΎΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Π² строкС запроса:

 memset(dest, -1, sizeof(*dest));

 mysql_escape_string(ss, search_str, strlen(search_str));

Π”Π°Π»Π΅Π΅ Π²Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ строку запроса. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ примСнСния большого количСства символов %, Ρ‚.ΠΊ. Π·Π½Π°ΠΊ % β€” это ΠΈ символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² SQL-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для указания соотвСтствия любой строкС ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ символ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sprintf:

 sprintf(qs, "SELECT DISTINCT artist.id, cd.id FROM artist, cd WHERE artist.id = cd.artist_id and (artist.name LIKE '%%%s%%' OR cd.title LIKE '%%%s%%' OR cd.catalogue LIKE '%%%s%%')", ss, ss, ss);

БСйчас ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос:

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

 } else {

  res_ptr = mysql_store_result(&my_connection);

  if (res_ptr) {

   num_rows = mysql_num_rows(res_ptr);

   if (num_rows > 0) {

    while ((mysqlrow = mysql_fetch_row(res_ptr)) && i < MAX_CD_RESULT) {

     sscanf(mysqlrow[1], "%d", &dest->cd_id[i]);

     i++;

    }

   }

   mysql_free_result(res_ptr);

  }

 }

 return num_rows;

} /* find_cds */

ПослСднСС, Π½ΠΎ Π½Π΅ ΠΏΠΎ значимости, β€” ваша рСализация способа удалСния ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков. Π’ соотвСтствии с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ скрытого управлСния элСмСнтами Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ исполнитСлСй Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ исполнитСля Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска, Ссли Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… дисков с Ρ‚ΠΎΠΉ ΠΆΠ΅ самой строкой исполнитСля. Π£Π΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ Π² языкС SQL Π½Π΅Ρ‚ срСдств описания удалСния ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚Π°Π±Π»ΠΈΡ†, поэтому Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

int delete_cd(int cd_id) {

 int res;

 char qs[250];

 int artist_id, num_rows;

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 if (!dbconnected) return 0;

 artist_id = -1;

 sprintf(qs, "SELECT artist_id FROM cd WHERE artist_id = \

(SELECT artist_id FROM cd WHERE id = '%d')", cd_id);

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

 } else {

  res_ptr = mysql_store_result(&my_connection);

  if (res_ptr) {

   num_rows = mysql_num_rows(res_ptr);

   if (num_rows == 1) {

    /* Π˜ΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ упоминаСтся Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… CD */

    mysqlrow = mysql_fetch_row(res_ptr);

    sscanf(mysqlrow[0], "%d", &artist_id);

   }

   mysql_free_result(res_ptr);

  }

 }

 sprintf(qs, "DELETE FROM track WHERE cd_id = '%d'", cd_id);

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "Delete error (track) %d: %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

  return 0;

 }

 sprintf(qs, "DELETE FROM cd WHERE id = '%d'", cd_id);

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "Delete error (cd) %d: %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

  return 0;

 }

 if (artist_id != -1) {

  /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ элСмСнт artist Π½Π΅ связан Π½ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ CD, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΅Π³ΠΎ */

  sprintf(qs, "DELETE FROM artist WHERE id = '%d'", artist_id);

  res = mysqlquery(&my_connection, qs);

  if (res) {

   fprintf(stderr, "Delete error (artist) %d: %s\n",

    mysql_errno(&my_connection), mysql_error(&my_connection));

  }

 }

 return 1;

} /* delete_cd */

На этом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Для закончСнности ΠΈ облСгчСния ΠΆΠΈΠ·Π½ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» Makefile. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ придСтся ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ include, зависящий ΠΎΡ‚ установки Π‘Π£Π Π‘Π” MySQL Π² вашСй систСмС.

all: Π°Ρ€Ρ€


Π°Ρ€Ρ€: app_mysql.с app_test.с app_mysql.h

 gcc -ΠΎ app -I/usr/include/mysql appmysql.с app_test.с -lmysqlclient -L/usr/lib/mysql

Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ… Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого интСрфСйса с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ интСрфСйсом GUI. БСйчас, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ измСнСния Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ шагам с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° gdb, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° измСнСниями Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ MySQL Query Browser, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎ нСобходимости ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для отслСТивания Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

РСзюмС 

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрСли Π‘Π£Π Π‘Π” MySQL. Π‘ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ слоТныС срСдства Π½Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ограничСния внСшнСго ΠΊΠ»ΡŽΡ‡Π° ΠΈ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹.

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ основныС свСдСния ΠΎΠ± установкС MySQL ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎΠ± основах администрирования Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… MySQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ΠœΡ‹ рассмотрСли API языка Π‘, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наряду с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ с Π‘Π£Π Π‘Π” MySQL. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ познакомились с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ языка SQL Π² дСйствии.

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

И ΠΊΠ°ΠΊ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, основной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ рСсурс MySQL β€” исходная страница MySQL Π½Π° сайтС www.mysql.com. 

Π“Π»Π°Π²Π° 9

БрСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ срСдства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, примСняСмыС Π² ОБ Linux, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… доступны ΠΈ Π² ОБ UNIX. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ компиляторы ΠΈ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ, Linux ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ряд срСдств, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти срСдства Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ способами. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΠΈ UNIX, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ унаслСдовала ОБ Linux. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ рассматриваСтся нСсколько Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ ряд ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΡ… использования для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. К этим срСдствам относятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β–‘ ΠΊΠΎΠΌΠ°Π½Π΄Π° make ΠΈ make-Ρ„Π°ΠΉΠ»Ρ‹;

β–‘ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ исходным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ RCS ΠΈ CVS;

β–‘ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ руководства;

β–‘ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ patch ΠΈ tar;

β–‘ ΡΡ€Π΅Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ примСнСния многочислСнных исходных Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠŸΡ€ΠΈ написании ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты послС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ просто ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, компилируя Π·Π°Π½ΠΎΠ²ΠΎ всС Ρ„Π°ΠΉΠ»Ρ‹. Но Π² случаС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Π°ΠΊΠΎΠΉ простой ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ВрСмя Ρ†ΠΈΠΊΠ»Π° "Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” компиляция β€” тСстированиС" быстро растСт. Π”Π°ΠΆΠ΅ самому Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈΠ²ΠΎΠΌΡƒ программисту Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСкомпиляции всСх Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ лишь ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ….