Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

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

Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание

Разработка приложений в среде Linux. Второе издание - описание и краткое содержание, автор Майкл Джонсон, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.

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

Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

int dpfdesc(DEPOT * depot);

Эта функция возвращает файловый дескриптор базы данных depqt [179] Несмотря на то что qdbm обеспечивает доступ к файловому дескриптору, использовать его следует осторожно. Дело в том, что все операции по чтению и записи в файл должны производиться через библиотеку qdbm ; операции, не связанные с изменением данных в файле, например, блокировка или установка флага для закрытия после выполнения, допускаются. .

25.2.4. Синхронизация базы данных

qdbmкэширует данные в оперативной памяти для ускорения доступа к базе данных, а ядро Linux кэширует записи на диске, чтобы свести к минимуму задержку между вызовами функции write(). Чтобы база данных, хранящаяся на диске, оставалась согласованной с буферизированными структурами, приложение может осуществлять ее синхронизацию. В процессе синхронизации базы данных qdbm очищает все ее внутренние буферы и вызывает функцию fsync()для файлового дескриптора.

int dpsync(DEPOT * depot);

25.3. Чтение записей

Прочитать записи в базе данных можно двумя способами: посредством поиска записи по ее ключу и путем чтения последовательных пар "ключ-значение".

25.3.1. Чтение определенной записи

Функции dpget()и dpgetwb()производят поиск записей в базе данных по ключу.

int dpget(DEPOT * depot, const char * key, int keySize, int start,

int max, int * dataSize);

keyявляется элементом (ключом), с помощью которого производится поиск по базе данных, a keySizeопределяет длину ключа (или значение -1, при котором Depotиспользует функцию strlen(key)для определения длины ключа). С помощью следующих двух параметров, startи max, можно производить частичное чтение записей; параметр startзадает смещение в данных, с которого начнется операция чтения, а max— максимальное количество байтов для чтения. Например, если область данных представляла бы собой массив из четырехбайтовых целочисленных значений int, то в результате присвоения параметру startзначения 12и параметру maxзначения 8производилось бы чтение четвертого и пятого элементов массива. Если для чтения доступно менее startбайтов, функция dpget()вернет NULL. Чтобы прочитать все байты из данных, параметру maxследует присвоить значение -1.

Если последний параметр, dataSize, не будет равен NULL, то целое число, на которое он указывает, будет соответствовать количеству прочитанных байтов.

В случае сбоя эта функция возвращает NULL, а в случае успешного завершения она возвращает указатель на прочитанные данные. В случае сбоя dpcodeсообщает о том, что стало причиной сбоя. В частности, если элемент не существует или имеет менее startбайтов данных, dpcodeбудет присвоено DP_ENOITEM.

Когда функция dpget()возвращает данные, к ним добавляется байт 0, позволяя работать с ними как со строкой. Размещение указателя производится с помощью функции malloc(), и приложение отвечает за освобождение памяти после завершения своей работы. Если приложениям необходимо поместить данные в буфер, вместо того чтобы Depotразмещала его с помощью функции malloc(), то они должны использовать функцию dpgetwb().

int dpgetwb(DEPOT * depot, const char * key, int keySize, int start,

int max, const char * data);

Функции dpgetwb()и dpget()отличаются друг от друга только двумя параметрами: max(который интерпретируется по-разному) и data(который заменяет параметр dataSizeиз функции dpgetwb()). Параметр dataдолжен указывать на буфер из maxбайтов, в который функция dpgetwb()будет помещать данные, прочитанные из базы данных. В функции dpgetwb()параметр maxне должен иметь значение -1, и буфер не будет иметь байт 0, автоматически добавляемый в него этой функцией. Функция dpgetwb()возвращает количество байтов, хранящихся в data, и -1, если запись не была найдена, если данных оказалось меньше startбайтов или если возникла ошибка.

25.3.2. Последовательное чтение записей

С помощью функций dpiterinit()и dpiternext()приложения могут производить итерации по всем ключам в базе данных. Ключи не возвращаются в каком-то определенном порядке [180] Вернее, они возвращаются в том порядке, в котором производятся ссылки на элементы из хеш-области. Хотя это и есть порядок, он является совершенно бесполезным. , а базу данных не нужно модифицировать во время итераций, производимых приложением.

int dpiterinit(DEPOT * depot);

char * dpiternext(DEPOT * depot, int * keySize);

В результате вызова функции dpiterinit() qdbmвернет первый ключ в базе данных во время следующего вызова функции dpiternext().

Функция dpiternext()возвращает указатель либо на первый ключ в базе данных (если только что была вызвана функция dpiterinit()), либо ключ в базе данных, который следует за ключом, возвращенным в последний раз. Если же в базе данных больше не окажется ключей, будет возвращено NULL. Если keySizeне равен NULL, то целочисленное значение, на которое указывает этот параметр, будет задано в качестве размера возвращаемого ключа.

Функция dpiternext()буфера возвращает указатель на размещение, выполненное функцией malloc(); после того как приложение завершит работу с ключом, указатель необходимо освободить функцией free(). Буфер также завершается NULL, поэтому при необходимости его можно трактовать как строку.

25.4. Модификация базы данных

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

25.4.1. Добавление записей

Новые и обновленные записи заносятся в базу данных с использованием функции dpput().

int dpput(DEPOT * dfepot, const char * key, int keySize, const char * data,

int dataSize, int dmode);

keyпредставляет собой значение индекса, который впоследствии может использоваться для получения информации, на которую указывает data. Параметры keySizeи dataSizeмогут иметь значение -1, при котором функция dpput()будет использовать функцию strlen()для получения размера данного поля. Проверка параметра dmodeпроизводится только в том случае, если параметр keyв базе данных уже связан с элементом данных. Параметр dmodeможет иметь одно из перечисленных ниже значений.

DP_DCAT Новые данные добавляются в конец данных, которые уже находятся в базе данных.
DP_DKEEP База данных не модифицируется; функция dpput()возвращает сбой, а параметру dpecodeприсваивается значение DP_EKEEP.
DP_DOVER Вместо существующего значения записывается новое.

Функция dpput()возвращает нулевое значение в случае возникновения ошибки (или если ключ уже существует, и было определено значение DP_DKEEP), и ненулевое значение, если данные для ключа были успешно обновлены.

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

Интервал:

Закладка:

Сделать


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

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




Разработка приложений в среде Linux. Второе издание отзывы


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


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

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