Logo Host-telecom.com — профессиональный хостинг в Европе! Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Мощные сервера

VPS с гибкой конфигурацией: за 1€

Мощные выделенные сервера: от 25€

Собственный Дата-Центр
Поддержка 24/7

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

ATLEX Выделенные серверы: в Европе / в России.

Виртуальные серверы: в Европе / в России.

Партнерская программа

SETJMP(3C)

НАЗВАНИЕ
setjmp, longjmp - нелокальная передача управления

СИНТАКСИС


	#include <setjmp.h>

	

	int setjmp (env)

	jmp_buf env;

	

	void longjmp (env, val)

	jmp_buf env;

	int val;

ОПИСАНИЕ
Описываемые функции полезны при обработке ошибок и прерываний, случившихся на одном из нижних уровней программной системы.

Функция setjmp сохраняет текущее стековое окружение в массиве env (тип jmp_buf определен во включаемом файле <setjmp.h>) для последующего использования функцией longjmp. Результат функции setjmp равен 0.

Функция longjmp восстанавливает окружение, сохраненное при последнем вызове setjmp с соответствующим аргументом env. После завершения longjmp выполнение программы продолжается так, как будто соответствующий вызов setjmp только что вернул значение val. Отметим, что в промежутке между обращениями к setjmp и longjmp не должно быть возврата из функции, вызывавшей setjmp.

С помощью функции longjmp невозможно вернуть нулевое значение. Если при вызове longjmp аргумент val равен 0, setjmp все равно вернет 1. Тем самым всегда есть возможность отличить естественный возврат из функции setjmp от искусственного, ставшего результатом выполнения longjmp. Значения всех глобальных объектов в момент искусственного возврата из setjmp, естественно, те же, что и в момент вызова longjmp. Значения локальных объектов соответствуют экземпляру функции, вызвавшей setjmp.

ПРИМЕР


	#include <setjmp.h>



	jmp_buf env;

	int i=0;

	main ()

	{

	  void exit ();



	  if (setjmp (env) != 0) {

	    (void) printf (

	     "Значение i при 2-ом возврате из setjmp: %d\n",i);

	    exit (0);

	  }

	  (void) printf (

	   "Значение i при 1-ом возврате из setjmp: %d\n",i);

	  i = 1;

	  g();

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

	}



	g()

	{

	  longjmp (env, 1);

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

	}

Результаты выполнения этой программы после компиляции с языка C будут следующими:

     	Значение i при 1-ом возврате из setjmp: 0

     	Значение i при 2-ом возврате из setjmp: 1

СМ. ТАКЖЕ
signal(2).

ПРЕДОСТЕРЕЖЕНИЯ
Если при обращении к функции longjmp передается аргумент env, не заполненный setjmp, или последний вызов setjmp был в функции, из которой уже произошел возврат, то Вам гарантируется абсолютный хаос.

Хостинг + Certum Commercial SSL и домен в подарок

VPS: SSD, KVM, бесплатные бэкапы и администрирование 24/7

Бесплатный перенос сайта + подарки к новоселью

хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

💰 Самые низкие цены на домены

🔒 Отличный хостинг на SSD c бесплатными SSL

💻 Огромнейший выбор dedicated выделенных серверов

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

хостинг Украина

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...