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


Авторские права

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

Здесь можно скачать бесплатно "Нейл Мэтью - Основы программирования в Linux" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство «БХВ-Петербург», год 2009. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Нейл Мэтью - Основы программирования в Linux
Рейтинг:
Название:
Основы программирования в Linux
Автор:
Издательство:
«БХВ-Петербург»
Год:
2009
ISBN:
978-5-9775-0289-4
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Основы программирования в Linux"

Описание и краткое содержание "Основы программирования в Linux" читать бесплатно онлайн.



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

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






 gtk_widget_show_all(GTK_WIDGET(GTK_DIALOG(dialog)->vbox));

 return dialog;

}

Упражнение 16.13. callbacks.c

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

1. Сначала необходимо включить заголовочный файл и ссылки на некоторые определенные в файле interface.c глобальные переменные для чтения и изменения конкретных свойств виджетов:

#include "app_gnome.h"


extern GtkWidget *treeview;

extern GtkWidget *app;

extern GtkWidget *appbar;

extern GtkWidget *artist_entry;

extern GtkWidget *title_entry;

extern GtkWidget *catalogue_entry;

static GtkWidget *addcd_dialog;

2. В функции quit_app вы вызываете функцию database_end для чистки и закрытия базы данных перед выходом:

void quit_app(GtkWidget* window, gpointer data) {

 database_end();

 gtk_main_quit();

}

3. Следующая функция выводит простое диалоговое окно для подтверждения вашего желания завершить приложение, возвращая отклик в виде значения gboolean:

gboolean confirm_exit() {

 gint result;

 GtkWidget* dialog = gtk_message_dialog_new(NULL,

  GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,

  GTK_BUTTONS_YES_NO, "Are you sure you want to quit?");

 result = gtk_dialog_run(GTK_DIALOG(dialog));

 gtk_widget_destroy(dialog);

 return (result == GTK_RESPONSE_YES);

}

4. delete_event_handler — функция обратного вызова, которую вы связываете с событием главного окна Gdk delete event. Событие генерируется, когда вы пытаетесь закрыть окно до того (что существенно), как послан сигнал GTK+ уничтожения окна:

gboolean delete_event_handler(GtkWidget* window, GdkEvent *event,

 gpointer data) {

 return !confirm_exit();

}

5. Следующая функция вызывается, когда мышью щелкается кнопка в диалоговом окне вставки компакт-диска. Если вы щелкнули мышью кнопку OK, программа копирует строки в массив типа char и передает его данные в интерфейсную функцию MySQL add_cd:

void addcd_dialog_button_clicked(GtkDialog * dialog, gint response,

 gpointer userdata) {

 const gchar *artist_const;

 const gchar* title_const;

 const gchar *catalogue_const;

 gchar artist[200];

 gchar title[200];

 gchar catalogue[200];

 gint *cd_id;

 if (response == GTK_RESPONSE_ACCEPT) {

  artist_const = gtk_entry_get_text(GTK_ENTRY(artist_entry));

  title_const = gtk_entry_get_text(GTK_ENTRY(title_entry));

  catalogue_const = gtk_entry_get_text(GTK_ENTRY(catalogue_entry));

  strcpy(artist, artist_const);

  strcpy(title, title_const);

  strcpy(catalogue, catalogue_const);

  add_cd(artist, title, catalogue, cd_id);

 }

 addcd_dialog = NULL;

 gtk_widget_destroy(GTK_WIDGET(dialog));

}

6. Далее идет самая важная часть приложения: извлечение результатов поиска и заполнение объекта GtkTreeView:

void on_search_button_clicked(GtkButton* button, gpointer userdata) {

 struct cd_search_st cd_res;

 struct current_cd_st cd;

 struct current_tracks_st ct;

 gint res1, res2, res3;

 gchar track_title[110];

 const gchar *search_string_const;

 gchar search string[200];

 gchar search_text[200];

 gint i = 0, j = 0;

 GtkTreeStore *tree_store;

 GtkTreeIter parent_iter, child_iter;

 memset(&track_title, 0, sizeof(track_title));

7. Здесь вы получаете строку поиска из виджета ввода, копируете ее в переменную и выбираете соответствующие ID компакт-дисков:

 search_string_const = gtk_entry_get_text(GTK_ENTRY(userdata));

 strcpy(search_string, search_string_const);

 resl = find_cds(search_string, &cd_res);

8. Затем вы обновляете appbar для вывода сообщения, информирующего пользователя о результатах поиска:

 sprintf(search_text, "Displaying %d result(s) for search string ' %s'",

  MIN(res1, MAX_CD_RESULT), search_string);

 gnome_appbar_push(GNOME_APPBAR(appbar), search_text);

9. Теперь у вас есть результаты поиска, и можно заполнять ими модель GtkTreeStore. Для каждого ID компакт-диска необходимо извлечь соответствующую структуру типа current_cd_st, которая содержит название и исполнителя CD, и затем извлечь список дорожек диска. В заголовочном файле app_mysql.h задано ограничение количества элементов, MAX_CD_RESULT, для того, чтобы не было переполнения модели GtkTreeStore:

 tree_store = gtk_tree_store_new(N_COLUMNS,

  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);

 while (i < res1 && i < MAX_CD_RESULT) {

  res2 = get_cd(cd_res.cd_id[i], &cd);

  /* В модель вставляется новая строка */

  gtk_tree_store_append(tree_store, &parent_iter, NULL);

  gtk_tree_store_set(tree_store, &parent_iter, COLUMN_TITLE,

   cd.title, COLUMN_ARTIST, cd.artist_name, COLUMN_CATALOGUE,

   cd.catalogue, -1);

  res3 = get_cd_tracks(cd_res.cd_id[i++], &ct);

  j = 0;

  /* Заполнение дерева дорожками текущего компакт-диска */

  while (j < res3) {

   sprintf(track_title, " Track %d. ", j+1);

   strcat(track_title, ct.track[j++]);

   gtk_tree_store_append(tree_store, &child_iter, &parent_iter);

   gtk_tree_store_set(tree_store, &child_iter,

    COLUMN_TITLE, track_title, -1);

  }

 }

 gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),

 GTK_TREE_MODEL(tree_store));

}

10. Диалоговое окно addcd немодальное. Следовательно, перед его созданием и отображением вы проверяете, не активно ли оно уже:

void on_addcd_activate(GtkMenuItem* menuitem, gpointer user_data) {

 if (addcd_dialog != NULL) return;

 addcd_dialog = create_addcd_dialog();

 gtk_widget_show_all(addcd_dialog);

}


gboolean close_app(GtkWidget * window, gpointer data) {

 gboolean exit;

 if ((exit = confirm_exit())) {

  quit_app(NULL, NULL);

 }

 return exit;

}

11. Когда вы щелкаете мышью кнопку About (О программе), раскрывается стандартное поле about среды GNOME:

void on_about_activate(GtkMenuItem* menuitem, gpointer user_data) {

 const char* authors[] = {"Wrox Press", NULL};

 GtkWidget* about = gnome_about_new("CD Database", "1.0",

  " (c) Wrox Press", "Beginning Linux Programming",

  (const char **)authors, NULL, "Translators", NULL);

 gtk_widget_show(about);

}

Упражнение 16.14. Файл main.c

Введите следующий программный код в файл main.с, содержащий функцию main программы.

1. После операторов include вы ссылаетесь на поля ввода имени пользователя и пароля из файла interface.c:

#include <stdio.h>

#include <stdlib.h>

#include "app_gnome.h"


extern GtkWidget* username_entry;

extern GtkWidget* password_entry;


gint main(gint argc, gchar *argv[]) {

 GtkWidget *main_window;

 GtkWidget *login_dialog;

 const char *user_const;

 const char *pass_const;

 gchar username[100];

 gchar password[100];

 gint result;

2. Инициализируйте как обычно библиотеки GNOME и затем создайте и отобразите на экране главное окно и диалоговое окно вашей регистрации:

 gnome_program_init("CdDatabase", "0.1", LIBGNOMEUI_MODULE, argc, argv,

  GNOME_PARAM_APP_DATADIR, "", NULL);

 main_window = create_main_window();

 gtk_widget_show_all(main_window);

 login_dialog = create_login_dialog();

3. Вы ждете в цикле, пока пользователь не введет корректную комбинацию имени пользователя и пароля. Он может выйти из приложения, щелкнув мышью кнопку Cancel, причем в этом случае ему придется подтвердить свое действие:

 while (1) {

  result = gtk_dialog_run(GTK_DIALOG(login_dialog));

  if (result != GTK_RESPONSE_ACCEPT) {

   if (confirm_exit()) return 0;

   else continue;

  }

  user_const = gtk_entry_get_text(GTK_ENTRY(username_entry));

  pass_const = gtk_entry_get_text(GTK_ENTRY(password_entry));

  strcpy(username, user_const);

  strcpy(password, pass_const);

  if (database_start(username, password) == TRUE) break;

4. Если функция database_start завершается аварийно, вы выводите сообщение и диалоговое окно регистрации снова отображается на экране:

  GtkWidget* error_dialog =

   gtk_message_dialog_new(GTK_WINDOW(main_window),

    GTK_DIALOG_DESTROY_WITH_PARENT,

    GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,

    "Could not log on! — Check Username and Password");

  gtk_dialog_run(GTK_DIALOG(error_dialog));

  gtk_widget_destroy(error_dialog);

 }

 gtk_widget_destroy(login_dialog);

 gtk_main();

 return 0;

}

5. Для компиляции этого приложения напишите make-файл. Как и в главе 8, вам, возможно, придется указать место расположения библиотеки mysql-клиента с помощью строки, подобной приведенной далее:

-L/usr/lib/mysql

После опции -L поместите каталог, в котором ваша система хранит библиотеки MySQL:

all: app


app: app_mysql.c callbacks.с interface.c main.с app_gnome.h app_mysql.h

 gcc -o app -I/usr/include/mysql app_mysql.с callbacks.с interface.c main.с -lmysqlclient `pkg-config --cflags --libs libgnome-2.0 libgnomeui-2.0`


clean:

 rm -f app

6. Теперь для компиляции приложения для работы с компакт-дисками просто воспользуйтесь командой make:

make -f Makefile

Когда вы запустите приложение арр, то получите ваше приложение для работы с базой данных компакт-дисков в стиле GNOME (рис. 16.15)!

Рис. 16.15 


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

Книги похожие на "Основы программирования в Linux" читать онлайн или скачать бесплатно полные версии.


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

Все книги автора Нейл Мэтью

Нейл Мэтью - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

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

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

Отзывы читателей о книге "Основы программирования в Linux", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.