-->

Основы программирования в Linux

На нашем литературном портале можно бесплатно читать книгу Основы программирования в Linux, Мэтью Нейл-- . Жанр: Программирование / ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Основы программирования в Linux
Название: Основы программирования в Linux
Дата добавления: 16 январь 2020
Количество просмотров: 670
Читать онлайн

Основы программирования в Linux читать книгу онлайн

Основы программирования в Linux - читать бесплатно онлайн , автор Мэтью Нейл
В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

Перейти на страницу:

В чем же выигрыш от вызова функции

mysql_use_result
по сравнению с вызовом функции
mysql_store_result
? У первой из названных функций есть ряд существенных преимуществ, касающихся управления ресурсами; но ее нельзя применять с функциями
mysql_data_seek
,
mysql_row_seek
или
mysql_row_tell
и польза от применения
mysql_num_rows
ограничена, поскольку она не может нормально функционировать до тех пор, пока не будут извлечены все данные.

Вы также увеличьте время ожидания в вашей программе, т.к. запрос каждой строки должен пройти по сети и также должны быть отправлены обратно результаты. Еще одна возможность — разрыв сетевого соединения в середине операции, оставляющий вас с неполным набором данных.

Но ни один из перечисленных недостатков никак не уменьшает достоинств, упомянутых ранее: лучше сбалансированная сетевая загрузка и меньшие непроизводительные потери памяти в случае возможных очень больших наборов данных.

Замена программы select1.c на программу select2.c, использующую метод

mysql_use_result
, проста, поэтому далее мы приводим измененный фрагмент в виде закрашенных серым цветом строк:

if (res) {

 printf("SELECT error: %sn", mysql_error(&my_connection));

} else {

 res_ptr = mysql_use_result(&my_connection);

<i> if (res_ptr) {</i>

<i>  while ((sqlrow = mysql_fetch_row(res_ptr))) {</i>

<i>   printf(&quot;Fetched data...n&quot;);</i>

<i>  }</i>

  if (mysql_errno(&amp;my_connection)) {

   printf(&quot;Retrieve error: %sn&quot;, mysql_error(&amp;my_connection));

  }

  mysql_free_result(res_ptr);

 }

}

Учтите, что вы не можете получить количество строк до тех пор, пока не будет извлечен последний результат. Но проверяя ошибки как можно раньше и чаще, вы облегчите применение функции

mysql_use_result
. Разрабатывая программу таким образом, можно уберечься от головной боли при последующих ее модификациях.

Обработка полученных данных

Зная, как извлекать строки, можно перейти к рассмотрению обработки полученных реальных данных.

MySQL, как большинство баз данных SQL, возвращает два вида данных:

□ данные, извлеченные из таблицы и называемые данными столбцов;

□ данные о данных, так называемые метаданные, например, имена столбцов и их типы.

Сначала сосредоточимся на получении данных, как таковых, в пригодном к использованию виде.

Функция

mysql_field_count
предоставляет некоторую базовую информацию о результате запроса. Она принимает ваше подключение как объект и возвращает количество полей (столбцов) в результирующем наборе.

<b>unsigned int mysql_field_count(MYSQL * connection);</b>

Помимо этого вы можете использовать

mysql_field_count
и в других случаях, таких как определение причины аварийного завершения вызова функции
mysql_store_result
. Если
mysql_store_result
возвращает
NULL
, а функция
mysql_field_count
— положительное число, можно предположить ошибку извлечения. Если же функция
mysql_field_count
возвращает 0, нет извлекаемых столбцов, что объясняет сбой при попытке сохранить результат. Естественно ожидать, что вы знаете, сколько предполагаемых столбцов должно быть получено в конкретном запросе. Таким образом, эта функция особенно полезна в компонентах общей обработки запросов и в любой ситуации, когда запросы формируются на лету.

Примечание

В программах, написанных для более ранних версий MySQL, вы можете встретить функцию

mysql_num_fields
. Она может принимать в качестве параметра указатель на структуру дескриптора подключения или структуру результата запроса и возвращает количество столбцов.

Если оставить в стороне заботы о форматировании, вы уже знаете, как немедленно вывести данные. Добавьте простую функцию

display_row
в программу select2.c.

Примечание

Обратите внимание на то, что для упрощения примера данные о подключении, результате и строке, полученные из функции

mysql_fetch_row
, все сделаны глобальными. В рабочей программе мы не рекомендуем делать это.

1. Далее приведена очень простая подпрограмма для вывода данных:

<i>void display_row() {</i>

<i> unsigned int field_count;</i>

<i> field_count = 0;</i>

<i> while (field_count &lt; mysql_field_count(&amp;my_commection)) {</i>

<i>  printf(&quot;%s &quot;, sqlrow[field_count]);</i>

<i>  field_count++;</i>

<i> }</i>

<i> printf(&quot;n&quot;);</i>

<i>}</i>

2. Вставьте ее в конец файла select2.c и добавьте объявление и вызов функции:

<i>void display_row();</i>

int main(int argc, char *argv[]) {

 int res;

 mysql_init(&amp;my_connection);

 if (mysql_real_connect(&amp;my_connection, &quot;localhost&quot;, &quot;rick&quot;,

  &quot;bar&quot;, &quot;rick&quot;, 0, NULL, 0)) {

  printf(&quot;Connection successn&quot;);

  res = mysql_query(&amp;my_connection,

   &quot;SELECT childno, fname, age FROM children WHERE age &gt; 5&quot;);

  if (res) {

   printf(&quot;SELECT error: %sn&quot;, mysql_error(&amp;my_connection));

  } else {

   res_ptr = mysql_use_result(&amp;my_connection);

   if (res_ptr) {

    while ((sqlrow = mysql_fetch_row(res_ptr))) {

Перейти на страницу:
Комментариев (0)
название