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

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

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

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

local_key_datum.dptr = (void *) entry_to_find;

local_key_datum.dsize = sizeof(entry_to_find);

memset(&local_data_datum, '\0', sizeof(local_data_datum));

local_data_datum = dbm_fetch(cdc_dbm_ptr, local_key_datum);

if (local_data_datum.dptr) {

memcpy(&entry_to_return, (char*)local_data_datum.dptr, local_data_datum.dsize);

}

return (entry_to_return);

} /* get_cdc_entry */

8. Было бы неплохо иметь возможность получать также и одиночный элемент-дорожку, именно этим занимается следующая функция аналогично функции get_cdc_entry, но с указателем на строку каталога и номер дорожки в качестве параметров:

cdt_entry get_cdt_entry(const char *cd_catalog_ptr, const int track_no) {

cdt_entry entry_to_return;

char entry_to_find[CAT_CAT_LEN + 10];

datum local_data_datum;

datum local_key_datum;

memset(&entry_to_return, '\0', sizeof(entry_to_return));

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (entry_to_return);

if (!cd_catalog_ptr) return (entry_to_return);

if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (entry_to_return);

/* Устанавливает ключ поиска, представляющий собой комбинацию

элемента каталога и номера дорожки */

memset(&entry_to_find, '\0', sizeof(entry_to_find));

sprintf(entry_to_find, "%s %d", cd_catalog_ptr, track_no);

local_key_datum.dptr = (void*)entry_to_find;

local_key_datum.dsize = sizeof(entry_to_find);

memset(&local_data_datum, '\0', sizeof(local_data_datum));

local_data_datum = dbm_fetch(cdt_dbm_ptr, local_key_datum);

if (local_data_datum.dptr) {

memcpy(&entry_to_return, (char*)local_data_datum.dptr, local_data_datum.dsize);

}

return (entry_to_return);

}

9. Следующая функция add_cdc_entryдобавляет новый элемент каталога:

int add_cdc_entry(const cdc_entry entry_to_add) {

char key_to_add[CAT_CAT_LEN + 1];

datum local_data_datum;

datum local_key_datum;

int result;

/* Проверяет инициализацию базы данных и корректность параметров */

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (0);

if (strlen(entry_to_add.catalog) >= CAT_CAT_LEN) return (0);

/* Гарантирует включение в ключ поиска только корректной строки

и значений null */

memset(&key_to_add, '\0', sizeof(key_to_add));

strcpy(key_to_add, entry_to_add.catalog);

local_key_datum.dptr = (void*)key_to_add;

local_key_datum.dsize = sizeof(key_to_add);

local_data_datum.dptr = (void*)&entry_to_add;

local_data_datum.dsize = sizeof(entry_to_add);

result = dbm_store(cdc_dbm_ptr, local_key_datum, local_data_datum, DBM_REPLACE);

/* dbm_store() применяет 0 для успешного завершения */

if (result == 0) return (1);

return (0);

}

10. Функция add_cdt_entryдобавляет новый элемент-дорожку. Ключ доступа — это комбинация строки из каталога и номера дорожки:

int add_cdt_entry(const cdt_entry entry_to_add) {

char key_to_add[CAT_CAT_LEN + 10];

datum local_data_datum;

datum local_key_datum;

int result;

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (0);

if (strlen(entry_to_add.catalog) >= CAT_CAT_LEN) return (0);

memset(&key_to_add, '\0 ', sizeof(key_to_add));

sprintf(key_to_add, "%s %d", entry_to_add.catalog, entry_to_add.track_no);

local_key_datum.dptr = (void*)key_to_add;

local_key_datum.dsize = sizeof(key_to_add);

local_data_daturn.dptr = (void*)&entry_to_add;

local_data_datum.dsize = sizeof(entry_to_add);

result = dbm_store(cdt_dbm_ptr, local_key_datum, local_data_datum, DBM_REPLACE);

/* dbm_store() применяет 0 в случае успешного завершения

и отрицательные числа для обозначения ошибок */

if (result == 0) return (1);

return (0);

}

11. Если вы можете вставлять строки, было бы лучше, если вы могли бы и удалять их. Следующая функция удаляет элементы каталога;

int del_cdc_entry(const char *cd_catalog_ptr) {

char key_to_del[CAT_CAT_LEN +1];

datum local_key_datum;

int result;

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (0);

if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (0);

memset(&key_to_del, '\0', sizeof(key_to_del));

strcpy(key_to_del, cd_catalog_ptr);

local_key_datum.dptr = (void*)key_to_del;

local_key_datum.dsize = sizeof(key_to_del);

result = dbm_delete(cdc_dbm_ptr, local_key_datum);

/* dbm_delete() применяет 0 в случае успешного завершения */

if (result == 0) return (1);

return (0);

}

12. Далее приведена аналогичная функция для удаления дорожки. Помните о том, что ключ дорожки — это сложный индекс, состоящий из строки, принадлежащей элементу каталога, и номера дорожки:

int del_cdt_entry(const char *cd_catalog_ptr, const int track_no) {

char key_to_del[CAT_CAT_LEN + 10];

datum local_key_datum;

int result;

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (0);

if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (0);

memset(&key_to_del, '\0', sizeof(key_to_del));

sprintf(key_to_del, "%s %d", cd_catalog_ptr, track_no);

local_key_datum.dptr = (void*)key_to_del;

local_key_datum.dsize = sizeof(key_to_del);

result = dbm_delete(cdt_dbm_ptr, local_key_datum);

/* dbm_delete() применяет 0 в случае успешного завершения */

if (result == 0) return (1);

return (0);

}

13. И последнее, но не по значимости, у вас есть простая функция поиска. Она не очень замысловата, но, тем не менее, показывает, как просматривать элементы dbm, если ключи заранее неизвестны.

Поскольку вы не знаете наперед, сколько будет элементов, вы создаете такую функцию, которая будет возвращать один элемент после каждого вызова. Если ничего не найдено, элемент будет пустым. Для просмотра всей базы данных начните с вызова этой функции с указателем на целое число *first_call_ptr, которое должно равняться 1 при первом вызове функции. Благодаря этому функция знает, что должна начать поиск с начала базы данных. В последующих вызовах переменная равна 0 и функция возобновляет поиск следом за последним найденным элементом.

Когда вы хотите перезапустить поиск, возможно, указав другой элемент каталога, вы должны снова вызвать эту функцию с параметром *first_call_ptr, равным true, что приведет к выполнению нового поиска.

Между вызовами функция хранит некоторую внутреннюю информацию о состоянии. Это скрывает от клиента сложность продолжения поиска и защищает секреты реализации функции поиска.

Если искомый текст указывает на символ null, все элементы считаются удовлетворяющими критериям поиска.

cdc_entry search_cdc_entry(const char *cd_catalog_ptr,

int *first_call_ptr) {

static int local_first_call = 1;

cdc_entry entry_to_return;

datum local_data_datum;

static datum local_key_datum; /* обратите внимание,

должна быть static */

memset(&entry_to_return, '\0', sizeof(entry_to_return));

14. Как всегда, начните с имеющих смысл проверок:

if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (entry_to_return);

if (!cd_catalog_ptr || !first_call_ptr) return (entry_to_return);

if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (entry_to_return);

/* Защита от пропуска вызова с *first_call_ptr, равным true */

if (local_first_call) {

local_first_call = 0;

*first_call_ptr = 1;

}

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

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий