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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

По схеме вызовов несложно определить время работы той или иной функции. Однако рекурсивные функции требуют особого подхода. Например, функция even()вызывает функцию odd(), а та — снова функцию even(). Самому длинному из таких циклов присваивается номер и выделяется отдельная секция отчета. Следующий фрагмент профильных данных получен в результате проверки того, является ли результат операции 1787 × 13 × 3 четным:

--------------------------------------

0.00 0.02 1/1 main [1]

[9] 0.1 0.00 0.02 1 apply_unary_function [9]

0.01 0.00 1/1 even [13]

0.00 0.00 1/1806 destroy_number [5]

0.00 0.00 1/13 empty_stack [17]

0.00 0.00 1/6 pop_stack [16]

0.00 0.00 1/6 push_stack [19]

--------------------------------------

[10] 0.1 0.01 0.00 1+69993 [10]

0.00 0.00 34647 even [13]

--------------------------------------

34847 even [13]

[11] 0.1 0.01 0.00 34847 odd [11]

0.00 0.00 34847/186997954 zerop [7]

0.00 0.00 1/1806 make_zero [16]

34846 even [13]

Выражение 1+69693в секции 10 сообщает о том что цикл 1 выполнялся один раз и в нем насчитывается 69693 обращений к функциям. Первой в цикле вызывалась функция even(), а из нее — функция odd. Обе функции вызывались по 34847 раз.

Утилита gprofрасполагает рядом полезных опций.

■ При задании опции -sбудут суммироваться результаты нескольких запусков программы.

■ С помощью опции -cможно узнать, какие дочерние функции могли быть, но так и не были вызваны

■ При задании опции -lотображается построчная профильная информация.

■ При задании опции -Aбудет отображен исходный текст программы, сопровождаемый процентными показателями времени выполнения.

А.3.4. Как работает утилита gprof

Схема работы утилиты gprofвыглядит следующим образом. Когда в ходе выполнения программы происходит вызов функции, счётчик обращений к функции увеличивается на единицу. Утилита периодически прерывает программу, чтобы выяснить, какая функция выполняется в данный момент. На основании этих '"выборок" и определяется время выполнения. В Linux тактовые импульсы генерируются с интервалом 0,01 с, следовательно, это наименьший промежуток между прерываниями. Таким образом, профильные данные о слишком быстро выполняющихся функциях могут оказаться неточными. Во избежание погрешностей рекомендуется запускать программу на длительные периоды времени или суммировать профильные данные по результатам нескольких запусков (это делается с помощью опции -s).

А.3.5. Исходные тексты программы-калькулятора

В листинге А.3 показан текст программы, вычисляющей значения постфиксных выражений.

Листинг А.3. ( calculator.c ) Основная часть программы-калькулятора

/* Вычисления в унарном формате. */

/* На вход программы подаются однострочные выражения

в обратной польской (постфиксной) записи, например:

602 7 5 - 3 * +

Вводимые числа должны быть неотрицательными

десятичными числами. Поддерживаются операторы

"+", "-" и "*". Унарные операторы "even" и "odd"

возвращают значение 1 в том случае, когда операнд

является четным или нечетным соответственно.

Лексемы разделяются пробелами. Отрицательные числа

не поддерживаются. */

#include

#include

#include

#include

#include "definitions.h"

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

операндами, извлекаемыми из стека, помещая результат

обратно в стек, в случае успеха возвращается

ненулевое значение. */

int apply_binary_function(number (*function)(number, number),

Stack* stack) {

number operand1, operand2;

if (empty_stack(*stack))

return 0;

operand2 = pop_stack(stack);

if (empty_stack(*stack))

return 0;

operand1 = pop_stack(stack);

push_stack(stack, (*function)(operand1, operand2));

destroy_number(operand1);

destroy_number(operand2);

return 1;

}

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

операндом, извлекаемым из стека, помещая результат

обратно в стек. В случае успеха возвращается

ненулевое значение. */

int apply_unary_function(number (*function)(number), Stack* stack) {

number operand;

if (empty_stack(*stack))

return 0;

operand = pop_stack(stack);

push_stack(stack, (*function)(operand));

destroy_number(operand);

return 1;

}

int main() {

char command_line[1000];

char* command_to_parse;

char* token;

Stack number_stack = create_stack();

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

Интервал:

Закладка:

Сделать

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

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


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

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

x