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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

должен быть удален в вызывающей функции. */

static char* get_group_name(gid_t gid) {

struct group* entry;

entry = getgrgid(gid);

if (entry == NULL)

system_error("getgrgid");

return xstrdup(entry->gr_name);

}

/* Эта функция находит имя программы, которую выполняет

процесс с заданным идентификатором. Возвращаемый буфер

должен быть удален в вызывающей функции. */

static char* get_program_name(pid_t pid) {

char file_name[64];

char status_info[256];

int fd;

int rval;

char* open_paren;

char* close_paren;

char* result;

/* Генерируем имя файла "stat", находящегося в каталоге

данного процесса в файловой системе /proc,

и открываем этот файл. */

snprintf(file_name, sizeof(file_name), "/proc/%d/stat",

(int)pid);

fd = open(file_name, O_RDONLY);

if (fd == 1)

/* Файл не удалось открыть. Возможно, процесс

больше не существует. */

return NULL;

/* Чтение содержимого файла

rval = read(fd, status_info, sizeof(status_info) — 1);

close(fd);

if (rval <= 0)

/* По какой-то причине файл не удалось прочитать, завершаем

работу. */

return NULL;

/* Завершаем прочитанный текст нулевым символом. */

status_info[rval] = '\0';

/* Имя программы -- это второй элемент файла, заключенный в

круглые скобки. Находим местоположение скобок. */

open_paren = strchr(status_info, '(');

close_paren = strchr(status_info, ')');

if (open_paren == NULL ||

close_paren == NULL || close_paren < open_paren)

/* He удалось найти скобки, завершаем работу. */

return NULL;

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

result = (char*)xmalloc(close_paren — open_paren);

/* Копирование имени программы в буфер. */

strncpy(result, open_paren + 1, close_paren - open_paren — 1);

/* Функция strncpy() не завершает строку нулевым символом,

приходится это делать самостоятельно. */

result[close_paren - open_paren - 1] = '\0';

/* Конец работы. */

return result;

}

/* Эта функция определяет размер (в килобайтах) резидентной

части процесса с заданным идентификатором.

В случае ошибки возвращается -1. */

static int get_rss(pid_t pid) {

char file_name[64];

int fd;

char mem_info[128];

int rval;

int rss;

/* Генерируем имя файла "statm", находящегося в каталоге

данного процесса в файловой системе proc. */

snprintf(file_name, sizeof(file_name), "/proc/%d/statm",

(int)pid);

/* Открытие файла. */

fd = open(file_name, O_RDONLY);

if (fd == -1)

/* Файл не удалось открыть. Возможно, процесс больше не

существует. */

return -1;

/* Чтение содержимого файла. */

rval = read(fd, mem_info, sizeof(mem_info) — 1);

close(fd);

if (rval <= 0)

/* Файл не удалось прочитать, завершаем работу. */

return -1;

/* Завершаем прочитанный текст нулевым символом. */

mem_infо[rval] = '\0';

/* Определяем размер резидентной части процесса. Это второй

элемент файла. */

rval = sscanf(mem_info, "%*d %d", &rss);

if (rval != 1)

/* Содержимое файла statm отформатировано непонятным

образом. */

return -1;

/* Значения в файле statm приведены в единицах, кратных размеру

системной страницы. Преобразуем в килобайты. */

return rss * getpagesize() / 1024;

}

/* Эта функция генерирует строку таблицы для процесса

с заданным идентификатором. Возвращаемый буфер должен

удаляться в вызывающей функции, в случае ошибки

возвращается NULL. */

static char* format_process_info(pid_t pid) {

int rval;

uid_t uid;

gid_t gid;

char* user_name;

char* group_name;

int rss;

char* program_name;

size_t result_length;

char* result;

/* Определяем идентификаторы пользователя и группы, которым

принадлежит процесс. */

rval = get_uid_gid(pid, &uid, &gid);

if (rval != 0)

return NULL;

/* Определяем размер резидентной части процесса. */

rss = get_rss(pid);

if (rss == -1)

return NULL;

/* Определяем имя исполняемого файла процесса. */

program_name = get_program_name(pid);

if (program_name == NULL)

return NULL;

/* Преобразуем идентификаторы пользователя и группы в имена. */

user_name = get_user_name(uid);

group_name = get_group_name(gid);

/* Вычисляем длину строки, в которую будет помещен результат,

и выделяем для нее буфер. */

result_length =

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

Интервал:

Закладка:

Сделать

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

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


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

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

x