Марк Митчелл - Программирование для Linux. Профессиональный подход

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

Программирование для Linux. Профессиональный подход: краткое содержание, описание и аннотация

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

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

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

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

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

Интервал:

Закладка:

Сделать

if (ptr == NULL)

abort();

else

return ptr;

}

void* xrealloc(void* ptr, size_t size) {

ptr = realloc(ptr, size);

/* Аварийное завершение, если выделить память не удалось. */

if (ptr == NULL)

abort();

else

return ptr;

}

char* xstrdup(const char* s) {

char* copy = strdup(s);

/* Аварийное завершение, если выделить память не удалось. */

if (сору == NULL)

abort();

else

return copy;

}

void system_error(const char* operation) {

/* Вывод сообщения об ошибке на основании значения

переменной errno. */

error(operation, strerror(errno));

}

void error(const char* cause, const char* message) {

/* Запись сообщения об ошибке в поток stderr. */

fprintf(stderr, "%s: error: (%s) %s\n", program_name,

cause, message);

/* Завершение программы */

exit(1);

}

char* get_self_executable_directory() {

int rval;

char link_target[1024];

char* last_slash;

size_t result_length;

char* result;

/* Чтение содержимого символической ссылки /proc/self/exe. */

rval =

readlink("/proc/self/exe", link_target,

sizeof(link_target));

if (rval == -1)

/* Функция readlink() завершилась неудачей, поэтому выходим

из программы. */

abort();

else

/* Запись нулевого символа в конец строки. */

link_target[rval] = '\0';

/* Удаление имени файла,

чтобы осталось только имя каталога. */

last_slash = strrchr(link_target, '/');

if (last_slash == NULL || last_slash == link_target)

/* Формат имени некорректен. */

abort();

/* Выделение буфера для результирующей строки. */

result_length = last_slash - link_target;

result = (char*)xmalloc(result_length + 1);

/* Копирование результата. */

strncpy(result, link_target, result_length);

result[result_length] = '\0';

return result;

}

Приведенные здесь функции можно использовать в самых разных программах.

■ Функции xmalloc(), xrealloc()и xstrdup()являются расширенными версиями стандартных функций malloc(), realloc()и strdup(), в которые дополнительно включен код проверки ошибок. В отличие от стандартных функций, которые возвращают пустой указатель в случае ошибки, наши функции немедленно завершают работу программы, если в системе недостаточно памяти.

Раннее обнаружение нехватки памяти — хорошая идея. Если этого не делать, пустые указатели будут появляться в самых неожиданных местах программы. Ситуации, связанные с нехваткой памяти, непросто воспроизвести, поэтому их отладка будет затруднена. Ошибки выделения памяти обычно имеют катастрофические последствия для программы, так что аварийное ее завершение — вполне приемлемый вариант реакции.

■ Функция error()сообщает о фатальной ошибке, произошедшей в программе. При этом в поток stderrзаписывается сообщение об ошибке, и работа программы завершается. Для ошибок, произошедших в системных вызовах или библиотечных функциях, предназначена функция system_error(), которая генерирует сообщение об ошибке на основании значения переменной errno(см. раздел 2.2.3, "Коды ошибок системных вызовов").

■ Функция get_self_executable_directory()определяет каталог, в котором содержится исполняемый файл текущего процесса. Это позволяет программе находить свои внешние компоненты. Функция проверяет содержимое символической ссылки /proc/self/exe(см. раздет 7.2.1, " Файл /proc/self).

В файле common.cопределены также две полезные глобальные переменные.

■ Переменная program_nameсодержит имя выполняемой программы, указанное в списке аргументов командной строки (см. раздел 2.1.1, "Список аргументов").

■ Переменная verboseне равна нулю, если программа работает в режиме выдачи развернутых сообщений. В таком случае многие компоненты будут записывать в поток stdoutсообщения о ходе выполнения задачи.

11.2.2. Загрузка серверных модулей

В файле module.c(листинг 11.3) содержится реализация динамически загружаемых серверных модулей. Загруженному модулю соответствует структура типа server_module, который определен в файле server.h.

Листинг 11.3. ( module.c ) Загрузка и выгрузка серверных модулей

#include

#include

#include

#include

#include "server.h"

char* module_dir;

struct server_module* module_open(const char* module_name) {

char* module_path;

void* handle;

void (*module_generate)(int);

struct server_module* module;

/* Формирование путевого имени библиотеки, в которой содержится

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

Интервал:

Закладка:

Сделать

Похожие книги на «Программирование для Linux. Профессиональный подход»

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


Отзывы о книге «Программирование для Linux. Профессиональный подход»

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

x