Нейл Мэтью - Основы программирования в 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 - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

void end_resp_to_client(void);

int client_starting(void);

void client_ending(void);

int send_mess_to_server(message_db_t mess_to_send);

int start_resp_from_server(void);

int read_resp_from_server(message_db_t *rec_ptr);

void end_resp_from_server(void);

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

Функции интерфейса клиента

Рассмотрим файл clientif.c. Он предоставляет "поддельные" версии подпрограмм доступа к базе данных. Они кодируют запрос в структуре message_db_tи затем применяют подпрограммы из файла pipe_imp.c для передачи запроса серверу. Такой подход позволит вам внести минимальные изменения в первоначальный файл app_ui.c.

Интерпретатор клиента

1. В этом файле реализовано девять функций для работы с базой данных, объявленных в файле cd_data.h. Делает он это передачей запросов серверу и затем возвратом ответа сервера из функции, действуя как посредник. Файл начинается с файлов #includeи констант.

#define _POSIX_SOURCE

#include

#include

#include

#include

#include

#include

#include

#include "cd_data.h"

#include "cliserv.h"

2. Статическая переменная mypidуменьшает количество вызовов getpid, требуемых в противном случае. Мы применяем локальную функцию read_one_responseдля устранения дублирующегося программного кода.

static pid_t mypid;

static int read_one_response(message_db_t *rec_ptr);

3. Подпрограммы database_initializeи closeвсе еще вызываются, но теперь используются, соответственно, для инициализации клиентского интерфейса каналов и удаления лишних именованных каналов, когда клиент завершил выполнение.

int database_initialize(const int new_database) {

if (!client_starting()) return(0);

mypid = getpid();

return(1);

}

/* инициализация базы данных */

void database_close(void) {

client_ending();

}

4. Подпрограмма get_cdc_entryвызывается для получения элемента каталога из базы данных по заданному названию компакт-диска в каталоге. В ней вы кодируете запрос в структуре message_db_tи передаете его на сервер. Далее вы считываете обратно ответ в другую структуру типа message_db_t. Если элемент найден, он включается в структуру message_db_tкак структура типа cdc_entry, поэтому вы можете передать соответствующую часть структуры.

cdc_entry get_cdc_entry(const char *cd_catalog_ptr) {

cdc_entry ret_val;

message_db_t mess_send;

message_db_t mess_ret;

ret_val.catalog[0] = '\0';

mess_send.client_pid = mypid;

mess_send.request = s_get_cdc_entry;

strcpy(mess_send.cdc_entry_data.catalog, cd_catalog_ptr);

if (send_mess_to_server(mess_send)) {

if (read_one_response(&mess_ret)) {

if (mess_ret.response == r_success) {

ret_val = mess_ret.cdc_entry_data;

} else {

fprintf(stderr, "%s", mess_ret.error_text);

}

} else {

fprintf(stderr, "Server failed to respond\n");

}

} else {

fprintf(stderr, "Server not accepting requests\n");

}

return(ret_val);

}

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

static int read_one_response(message_db_t *rec_ptr) {

int return_code = 0;

if (!rec_ptr) return(0);

if (start_resp_from_server()) {

if (read_resp_from_server(rec_ptr)) {

return_code = 1;

}

end_resp_from_server();

}

return(return_code);

}

6. Остальные подпрограммы get_xxx, del_xxxи add_xxxреализованы аналогично функции get_cdc_entryи приводятся здесь для полноты картины. Сначала функция для извлечения дорожек компакт-диска.

cdt_entry get_cdt_entry(const char *cd_catalog_ptr,

const int track no) {

cdt_entry ret_val;

message_db_t mess_send;

message_db_t mess_ret;

ret_val.catalog[0] = '\0';

mess_send.client_pid = mypid; mess_send.request = s_get_cdt_entry;

strcpy(mess_send.cdt_entry_data.catalog, cd_catalog_ptr);

mess_send.cdt_entry_data.track_no = track_no;

if (send_mess_to_server(mess_send)) {

if (read_one_response(&mess_ret)) {

if (mess_ret.response == r_success) {

ret_val = mess_ret.cdt_entry_data;

} else {

fprintf(stderr, "%s", mess_ret.error_text);

}

} else {

fprintf(stderr, "Server failed to respond\n");

}

} else {

fprintf(stderr, "Server not accepting requests\n");

}

return(ret_val);

}

7. Далее две функции для вставки данных, первая для добавления элемента каталога, а вторая — дорожек в базу данных.

int add_cdc_entry(const cdc_entry entry_to_add) {

message_db_t mess_send;

message_db_t mess_ret;

mess_send.client_pid = mypid;

mess_send.request = s_add_cdc_entry;

mess_send.cdc_entry_data = entry_to_add;

if (send_mess_to_server(mess_send)) {

if (read_one_response(&mess_ret)) {

if (mess_ret.response == r_success) {

return(1);

} else {

fprintf(stderr, "%s", mess_ret.error_text);

}

} else {

fprintf(stderr, "Server failed to respond\n");

}

} else {

fprintf(stderr, "Server not accepting requests\n");

}

return(0);

}

int add_cdt_entry(const cdt_entry entry_to_add) {

message_db_t mess_send;

message_db_t mess_ret;

mess_send.client_pid = mypid;

mess_send.request = s_add_cdt_entry;

mess send.cdt_entry data = entry_to_add;

if (send_mess_to_server(mess_send)) {

if (read_one_response(&mess_ret)) {

if (mess_ret.response == r_success) {

return(1);

} else {

fprintf(stderr, "%s", mess_ret.error_text);

}

} else {

fprintf(stderr, "Server failed to respond\n");

}

} else {

fprintf(stderr, "Server not accepting requests\n");

}

return(0);

}

8. В заключение две функции для удаления данных.

int del_cdc_entry(const char *cd_catalog_ptr) {

message_db_t mess_send;

message_db_t mess_ret;

mess_send.client_pid = mypid;

mess_send.request = s_del_cdc_entry;

strcpy(mess_send.cdc_entry_data.catalog, cd_catalog_ptr);

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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