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

Здесь есть возможность читать онлайн «Нейл Мэтью - Основы программирования в Linux» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2009, ISBN: 2009, Издательство: «БХВ-Петербург», Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Основы программирования в Linux: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Основы программирования в Linux»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

Основы программирования в Linux — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Основы программирования в Linux», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int get_cd(int cd_id, struct current_cd_st *dest) {

MYSQL_RES *res_ptr;

MYSQL_ROW mysqlrow;

int res;

char qs[250];

if (!dbconnected) return 0;

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

dest->artist_id = -1;

sprintf(qs, "SELECT artist.id, cd.id, artist.name, cd.title, cd.catalogue \

FROM artist, cd WHERE artist.id = cd.artist_id and cd.id = %d", cd_id);

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 */

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Основы программирования в Linux» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Основы программирования в Linux»

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