Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб.пос.СП.doc
Скачиваний:
28
Добавлен:
31.03.2015
Размер:
1.33 Mб
Скачать

Контрольные вопросы

  1. Реализуйте упрощенный интерфейс обмена сообщениями на базе сокетов.

  2. Разработайте сетевой поисковый робот, который начинает поиск с заданного URL. Просматривает найденную страницу, извлекает из нее все обнаруженные абсолютные ссылки и помещает их в свой список. Затем робот должен обойти все найденные ссылки, получить по ссылкам Web – страницы и извлечь из них дополнительные ссылки. Поиск повторять до тех пор, пока число ссылок в списке не превысит некоторое значение или пока программа не будет прервана.

  3. Напишите программу, которая возвращает информацию о хосте по его имени.

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

  5. Разработайте Web – браузер, который получает HTML – документы от сервера и все полученные данные будут выводиться на устройство стандартного вывода.

Литература

  1. Глас Г., Эйблс К. Unix для программистов и пользователей. / Г. Глас, К. Эйблс – СПб.: БХВ-Петербург, 2004. – 848 с.: ил.

  2. Брюс М. Unix/Linux: Теория и практика программирования. / М.Брюс – Издательство: Кудиц-Образ, 2004. -576 с.

  3. Вейрле К. Linux: сетевая архитектура. Структура и реализация сетевых протоколов в ядре. / К. Вейрле. – Издательство: Кудиц-Образ, 2006. -656 с.

  4. Собель М.Г. Linux. Администрирование и системное программирование. / М.Г. Собель. - Издательство: Питер, 2011. – 880 с.

Глава 8.Сигналы и таймеры

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

    1. Введение в сигналы

Ниже приводится пример программы, которая демонстрирует перехват и обработку сигналов. Она выводит число каждые три секунды, а при получении сигнала прерывания (SIGINT), выводит сообщение и завершается:

static void fcn(int signum)

{

(void)write(STDOUT_FILENO, “Получен сигнал\n”, 15);

_exit(EXIT_FAILURE);

}

int main(void)

{

int i;

struct sigaction act;

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

act.sa.handler = fcn;

sigaction(SIGINT, &act, NULL);

for (i = 1; ; i++) {

sleep(3);

printf(“%d\n”, i);

}

exit(EXIT_SUCCESS);

EC_CLEANUP_BGN

exit(EXIT_FAILURE);

EC_CLEANUP_END

}

Обращением к системному вызову sigaction производится установка функции-обработчика сигнала SIGINT. После запуска программы, когда на экране появилось число 2, нужно нажать на клавишу CTRL+C. Это приведет к тому, что исполнение программы будет прервано и управление перейдет к функции fcn, которая выведет текст сообщения и завершит работу программы, обратившись к системному вызову _exit. В результате, на экране появится:

1

2

Получен сигнал

Если бы функция-обработчик не была установлена, нажатие комбинации CTRL+C привело бы к немедленному завершению работы процесса, потому что в этом заключается реакция по умолчанию любого процесса на сигнал SIGINT.

С помощью системного вызова sigaction можно заставить процесс игнорировать сигнал SIGINT:

int main(void)

{

int i;

struct sigaction act;

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

act.sa.handler = SIG_IGN;

sigaction(SIGINT, &act, NULL);

for (i = 1; ; i++) {

sleep(3);

printf(“%d\n”, i);

}

exit(EXIT_SUCCESS);

EC_CLEANUP_BGN

exit(EXIT_FAILURE);

EC_CLEANUP_END

}

На этот раз программа будет продолжать выводить числа, невзирая на нажатия клавиш CTRL+C. Завершить ее можно нажатием комбинации CTRL+\, которая порождает сигнал SIGQUIT. Работа с сигналами достаточно сложна, потому что:

  • существует значительное количество различных сигналов и нередко обстоятельства, их породившие, очень трудны для понимания;

  • выбор той или иной реакции на сигнал может оказаться непростым;

  • обработка сигнала может быть связана с серьезными трудностями.