» » » Нейл Мэтью - Основы программирования в Linux


Авторские права

Нейл Мэтью - Основы программирования в Linux

Здесь можно скачать бесплатно "Нейл Мэтью - Основы программирования в Linux" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство «БХВ-Петербург», год 2009. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Нейл Мэтью - Основы программирования в Linux
Рейтинг:
Название:
Основы программирования в Linux
Автор:
Издательство:
«БХВ-Петербург»
Год:
2009
ISBN:
978-5-9775-0289-4
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

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

Описание и краткое содержание "Основы программирования в Linux" читать бесплатно онлайн.



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

Для начинающих Linux-программистов






MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

□ Функция mysql_data_seek позволяет перемещаться в результирующем наборе, задавая строку, которая будет возвращена при следующем вызове функции mysql_fetch_row. Значение offset — номер строки в диапазоне от нуля до общего количества строк в результирующем наборе, уменьшенного на единицу. Передача нулевого значения вызовет возврат первой строки при следующем вызове функции mysql_fetch_row.

void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);

□ Функция mysql_row_tell возвращает величину смещения, обозначая текущую позицию в результирующем наборе. Это не номер строки и его нельзя использовать в функции mysql_data_seek.

MSSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);

Но ее можно применять с функцией

MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,

 MYSQL_ROW_OFFSET offset);

которая перемещает текущую позицию в результирующем наборе и возвращает предыдущую позицию.

Примечание

Эта пара функций очень полезна для перемещения между известными записями в результирующем наборе. Будьте внимательны и не путайте величину смещения, используемую функциями row_tell и row_seek со значением смещения, применяемым в функции data_seek. Иначе ваши результаты будут непредсказуемыми.

После того как вы сделаете с вашими данными все, что нужно, вы должны явно применить функцию mysql_free_result, позволяющую библиотеке MySQL навести после себя порядок.

void mysql_free_result(MYSQL_RES *result);

Когда с результирующим набором будет покончено, обязательно нужно вызвать эту. функцию и позволить библиотеке MySQL уничтожить объекты, которым она выделила память.

Извлечение данных

Теперь вы можете написать свое первое приложение с выборкой данных. Вы. хотите выбрать все записи, в которых возраст ребенка более 5 лет. Пока вы еще не знаете, как обработать эти данные, поэтому начнем с простого их извлечения. Важный фрагмент, в котором вы считываете результирующий набор и выводите в цикле полученные данные, выделен цветом. Далее приведена программа select1.с.

#include <stdlib.h>

#include <stdio.h>

#include "mysql.h"


MYSQL my_connection;

MYSQL_RES *res_ptr;

MYSQL_ROW sqlrow;

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

 int res;

 mysql_init(&my_connection);

 if (mysql_real_connect(&my_connection, "localhost", "rick",

  "secret", "foo", 0, NULL, 0)) {

  printf("Connection success\n");

  res = mysql_query(&my_connection,

   "SELECT childno, fname, age FROM children WHERE age > 5");

  if (res) {

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

  } else {

   res_ptr = mysql_store_result(&my_connection);

   if (res_ptr) {

    printf("Retrieved %lu rows\n",

     (unsigned long)mysql_num_rows(res_ptr));

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

     printf("Fetched data...\n");

    }

    if (mysql_errno(&my_connection)) {

     fprintf(stderr, "Retrieve error: %s\n",

      mysql_error(&my_connection));

    }

    mysql_free_result(res_ptr);

   }

  }

  mysql_close(&my_connection);

 } else {

  fprintf(stderr, "Connection failed\n');

  if (mysql_errno(&my_connection)) {

   fprintf(stderr, "Connection error %d: %s\n",

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

  }

 }

 return EXIT_SUCCESS;

}

Построчное извлечение данных

Для извлечения данных строка за строкой, если вы действительно хотите этого, пользуйтесь функцией mysql_use_result вместо функции mysql_store_result.

MYSQL_RES *mysql_use_result(MYSQL *connection);

Как и mysql_store_result, функция mysql_use_result в случае ошибки возвращает NULL; если она выполняется успешно, то возвращает указатель на объект с результирующим набором. Но эта функция отличается тем, что не считывает никаких данных в результирующий набор, который инициализировала.

Примечание

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

В чем же выигрыш от вызова функции 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: %s\n", mysql_error(&my_connection));

} else {

 res_ptr = mysql_use_result(&my_connection);

 if (res_ptr) {

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

   printf("Fetched data...\n");

  }

  if (mysql_errno(&my_connection)) {

   printf("Retrieve error: %s\n", mysql_error(&my_connection));

  }

  mysql_free_result(res_ptr);

 }

}

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

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

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

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

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

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

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

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

unsigned int mysql_field_count(MYSQL * connection);

Помимо этого вы можете использовать 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. Далее приведена очень простая подпрограмма для вывода данных:

void display_row() {

 unsigned int field_count;

 field_count = 0;

 while (field_count < mysql_field_count(&my_commection)) {


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Основы программирования в Linux"

Книги похожие на "Основы программирования в Linux" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Нейл Мэтью

Нейл Мэтью - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Нейл Мэтью - Основы программирования в Linux"

Отзывы читателей о книге "Основы программирования в Linux", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.