Как не следует делать это - C-Unix пример
Как не следует делать это - C-Unix пример
Первым контрпримером механизма (наиболее полно представленным в Unix, но доступным и на других платформах, реализующих C) является процедура signal, вызываемая в следующей форме:
signal (signal_code, your_routine)
с эффектом вызова обработчика исключения - программы your_routine, когда выполнение текущей программы прерывается, выдавая соответствующий код сигнала (signal_code). Код сигнала - целочисленная константа, например, SIGILL (неверная инструкция - illegal instruction) или SIGFPE (переполнение с плавающей точкой - floating-point exception). В программу можно включить сколь угодно много вызовов процедуры signal, что позволяет обрабатывать различные, возможные ошибки.
Теперь предположим, что при выполнении некоторой инструкции произошло прерывание и выработан соответствующий код сигнала. Будет или нет вызвана процедура signal, но выполнение программы завершается в не нормальном состоянии. Предположим, что вызывается обработчик события - your_routine, пытающийся исправить ситуацию. Беда в том, что, завершив работу, он возвращает управление непосредственно в точку, где произошло прерывание (в не нормальное состояние). Это опасно, вероятнее всего, из этой точки невозможно нормально продолжить работу.
Что необходимо в большинстве подобных случаев - исправить ситуацию и продолжить выполнение, начиная с некоторой особой точки, но не точки прерывания. Мы увидим, что есть простой механизм, реализующий эту схему. Заметьте, он может быть реализован и на C, на большинстве платформ. Достаточно комбинировать процедуру signal с двумя другими библиотечными процедурами: setjmp, вставляющую маркер в точку, допускающую продолжение вычислений, и longjmp для возврата к маркеру. С механизмом setjmp-longjmp следует обращаться весьма аккуратно. Поэтому он не ориентирован на обычных программистов, но может использоваться разработчиками компиляторов для реализации высокоуровневого механизма ОО-исключений, который будет описан в этой лекции.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Пример: функция bind и доменный сокет Unix
Пример: функция bind и доменный сокет Unix Программа, показанная в листинге 15.2, создает доменный сокет Unix, с помощью функции bind связывает с ним полное имя и затем вызывает функцию getsockname и выводит это полное имя.Листинг 15.2. Связывание полного имени с доменным сокетом
Чего следует остерегаться
Чего следует остерегаться Главное, чего следует остерегаться при поиске вакансий, – это мошенничества. Интернет со своей конфиденциальностью – настоящий рай для мошенников всех мастей. Нет, я, конечно, не советую вам превращаться в параноика и начать подозревать всех и
* Продолжение следует??
* Продолжение следует?? - Даже не знаю, что тебе ответить. Предыдущий текст я писал примерно год назад, затем запал спал, появились новые задачи, то да сё, сам понимаешь.* Не отбрешешься!- Да, помнится, были задумки, но чтобы продолжить надо опять сосредоточится в нужное
Когда следует записывать макрос
Когда следует записывать макрос Макросы экономят время и снимают раздражение. Это действительно так. Компьютер воспроизведет последовательность команд куда быстрее, чем это сделаете вы, щелкая на соответствующих кнопках команд и выбирая пункты соответствующих меню.
0. Не мелочитесь, или Что не следует стандартизировать
0. Не мелочитесь, или Что не следует стандартизировать РезюмеСкажем кратко: не мелочитесь.ОбсуждениеВопросы персонального вкуса, которые не влияют на корректность и читаемость кода, не относятся к стандарту кодирования. Любой профессиональный программист сможет легко
5.1.1. Учебный пример: формат файлов паролей в Unix
5.1.1. Учебный пример: формат файлов паролей в Unix Во многих операционных системах данные пользователей, необходимые для регистрации и запуска пользовательского сеанса, представляют собой трудную для понимания двоичную базу данных. В противоположность этому, в
5.1.1. Учебный пример: формат файлов паролей в Unix
5.1.1. Учебный пример: формат файлов паролей в Unix Во многих операционных системах данные пользователей, необходимые для регистрации и запуска пользовательского сеанса, представляют собой трудную для понимания двоичную базу данных. В противоположность этому, в
Unix-строки (чтение и запись Unix-файлов)
Unix-строки (чтение и запись Unix-файлов) Данный модуль позволяет читать и записывать файлы формата Unix.unit StreamFile;interfaceUses SysUtils;Procedure AssignStreamFile(var f: text; FileName: String);implementationConst BufferSize = 128;Type TStreamBuffer = Array[1..High(Integer)] of Char; TStreamBufferPointer = ^TStreamBuffer; TStreamFileRecord = Record Case Integer Of 1: ( Filehandle: Integer; Buffer:
ОКНО ДИАЛОГА: Знать, что делать, а не как делать
ОКНО ДИАЛОГА: Знать, что делать, а не как делать 19 сентября 2005 года исполнилось пятнадцать лет с момента появления Интернета в России. 19 сентября 1990 года был зарегистрирован домен su. Отечественный сегмент всемирной сети был создан во многом благодаря сотрудникам
Что следует повторно использовать?
Что следует повторно использовать? Убедив себя в том, что Повторное использование - Это Хорошо, осталось выяснить, как же этого добиться?Первый возникающий вопрос - на каком уровне следует осуществлять повторное использование: персонала, спецификаций, проектов, их
Как не следует делать это - Ada пример
Как не следует делать это - Ada пример Приведу пример программы, взятый из одного учебника12.1) по языку Ada.sqrt (x: REAL) return REAL isbeginif x < 0.0 thenraise Negativeelsenormal_square_root_computationendexceptionwhen Negative =>put ("Negative argument")returnwhen others => ...end -- sqrtЭтот пример, вероятно, предназначался для синтаксической
Какие подробности следует опубликовать
Какие подробности следует опубликовать После того как вы обнаружили и выявили уязвимость, потребуется определить, какие именно сведения следует включить в сообщение. В основном ваше решение будет зависеть от того, кому вы собираетесь направить сообщение. Но обычно в
Глава 25. Когда не следует использовать ХР
Глава 25. Когда не следует использовать ХР Точные пределы использования ХР еще не до конца исследованы. Однако есть известный набор факторов, который делает применение ХР невозможным, – слишком большие команды, недоверчивые заказчики, технология, которая не позволяет