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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

if (new_database) {

/* Удаляет старые файлы */

(void)unlink(CDC_FILE_PAG);

(void)unlink(CDC_FILE_DIR);

(void)unlink(CDT_FILE_PAG);

(void)unlink(CDT_FILE_DIR);

}

/* Открывает несколько новых файлов, создавая их при необходимости */

cdc_dbm_ptr = dbm_open(CDC_FILE_BASE, open_mode, 0644);

cdt_dbm_ptr = dbm_open(CDT_FILE_BASE, open_mode, 0644);

if (!cdc_dbm_ptr || !cdt_dbm_ptr) {

fprintf(stderr, "Unable to create database\n");

cdc_dbm_ptr = cdt_dbm_ptr = NULL;

return (0);

}

return (1);

}

4. Функция database_closeпросто закрывает базу данных, если она была открыта и устанавливает указатели базы данных в null, чтобы показать, что нет открытой базы данных:

void database_close(void) {

if (cdc_dbm_ptr) dbm_close(cdc_dbm_ptr);

if (cdt_dbm_ptr) dbm_close(cdt_dbm_ptr);

cdc_dbm_ptr = cdt_dbm_ptr = NULL;

}

5. Далее у вас появляется функция, извлекающая единственный элемент каталога, когда передан указатель на строку текста из каталога. Если элемент не найден, у возвращенных данных пустое поле каталога:

cdc_entry get_cdc_entry(const char *cd_catalog_ptr) {

cdc_entry entry_to_return;

char entry_to_find[CAT_CAT_LEN + 1];

datum local data datum;

datum local_key_datum;

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

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

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));

strcpy(entry_to_find, cd_catalog_ptr);

7. Задайте структуру datum, нужную функциям базы данных dbm, и используйте функцию dbm_fetchдля извлечения данных. Если не извлечены никакие данные, вы возвращаете пустую структуру entry_to_return, которая была инициализирована ранее:

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добавляет новый элемент-дорожку. Ключ доступа — это комбинация строки из каталога и номера дорожки:

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

Интервал:

Закладка:

Сделать

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

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


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

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