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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

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

Прокладка каналов

1. Сначала откройте канал клиента.

int start_resp_to_client(const message_db_t mess_to_send) {

#if DEBUG_TRACE

printf("%d :- start_resp_to_client()\n", getpid());

#endif

(void)sprintf(client_pipe_name, CLIENT_PIPE,

mess_to_send.client_pid);

if ((client_fd = open(client_pipe_name, O_WRONLY)) == -1) return(0);

return(1);

}

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

int send_resp_to_client(const message_db_t mess_to_send) {

int write_bytes;

#if DEBUG_TRACE

printf("%d :- send_resp_to_client()\n", getpid());

#endif

if (client_fd == -1) return(0);

write_bytes = write(client_fd, &mess_to_send, sizeof(mess_to_send));

if (write_bytes != sizeof(mess_to_send)) return(0);

return(1);

}

3. В заключение закройте клиентский канал.

void end resp_to_client(void) {

#if DEBUG_TFACE

printf("%d :- end_resp_to_client()\n", getpid());

#endif

if (client_fd != -1) {

(void)close(сlient_fd);

client_fd = -1;

}

}

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

Дополнение к серверу — клиентские функции в файле pipe_imp.c. Они очень похожи на серверные функции за исключением функции с интригующим именем send_mess_to_server.

Клиентские функции

1. После проверки доступности сервера функция client_startingинициализирует канал клиентской стороны.

int client_starting(void) {

#if DEBUG_TFACE

printf("%d client_starting\n", getpid());

#endif

mypid = getpid();

if ((server_fd = open(SERVER_PIPE, O_WRONLY)) == -1) {

fprintf(stderr, "Server not running\n");

return(0);

}

(void)sprintf(client pipe name, CLIENT_PIPE, mypid);

(void)unlink(client_pipe_name);

if (mkfifo(client_pipe_name, 0777) == -1) {

fprintf(stderr, "Unable to create client pipe %s\n", client_pipe_name);

return(0);

}

return(1);

}

2. Функция client_endingзакрывает файловые дескрипторы и удаляет ненужный теперь именованный канал.

void client_ending(void) {

#if DEBUG_TRACE

printf("%d client_ending()\n", getpid());

#endif

if (client_write_fd != -1) (void)close(client_write_fd);

if (client_fd != -1) (void)close(client_fd);

if (server_fd != -1) (void)close(server_fd);

(void)unlink(client_pipe_name);

}

3. Функция send_mess_to_serverпередает запрос через канал сервера.

int send_mess_to_server(message_db_t mess_to_send) {

int write_bytes;

#if DEBUG_TRACE

printf("%d send_mess_to_server()\n", getpid());

#endif

if (server_fd == -1) return(0);

mess_to_send.client_pid = mypid;

write_bytes = write(server_fd, &mess_to_send, sizeof(mess_to_send));

if (write_bytes != sizeof(mess_to_send)) return(0);

return(1);

}

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

Получение результатов с сервера

1. Данная клиентская функция запускается для ожидания ответа сервера. Она открывает канал клиента только для чтения и затем повторно открывает файл канала только для записи. Чуть позже в этом разделе вы поймете почему.

int start_resp_from_server(void) {

#if DEBUG_TRACE

printf("%d :- start_resp_from_server()\n", getpid());

#endif

if (client_pipe_name[0] == '\0') return(0);

if (client_fd != -1) return(1);

client_fd = open(client_pipe_name, O_RDONLY);

if (client_fd != -1) {

client_write_fd = open(client_pipe_name, O_WRONLY);

if (client_write_fd != -1) return(1);

(void)close(client_fd);

client_fd = -1;

}

return(0);

}

2. Далее приведена основная операция read, которая получает с сервера совпадающие элементы базы данных.

int read_resp_from_server(message_db_t *rec_ptr) {

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

Интервал:

Закладка:

Сделать

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

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


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

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

x