2852
Обработка системных ошибок
Контрольная
Информатика, кибернетика и программирование
Обработка системных ошибок В стандартной библиотеке stdlib.h объявлена переменная errno типа int, которая содержит код системной ошибки, значение переменной устанавливается ОС после выполнения каждой системной операции. В стандартной библиотеке errn...
Русский
2012-10-20
65.5 KB
5 чел.
В стандартной библиотеке stdlib.h объявлена переменная errno типа int, которая содержит код системной ошибки, значение переменной устанавливается ОС после выполнения каждой системной операции. В стандартной библиотеке errno.h объявлены макросы, идентифицирующие коды ошибок, переменная errno принимает значения этих макросов. Ниже в таблице приведены значения макросов, идентифицирующих коды ошибок при работе с файлами и программами.
Имя макроса |
Значение |
Примечание |
EACCES |
5 |
Нет прав доступа |
EBADF |
6 |
Неправильный дескриптор |
EEXIST |
35 |
Файл уже существует |
EMFILE |
4 |
Слишком много открытых файлов |
ENOENT |
2 |
Файл не найден |
ENOTSAM |
17 |
Неверно задано устройство |
E2BIG |
20 |
Слишком большой список аргументов |
ENOEXEC |
21 |
Ошибка формата исполнимого файла |
ENOMEM |
8 |
Нет свободной памяти |
EINVAL |
19 |
Неправильный аргумент |
Запуск внешних программ на выполнение
В стандартной библиотеке process.h объявлены функции, позволяющие из программы запускать на выполнение другую программу.
Семейства функций exec и spawn.
int execl(char* path, char* arg0, ..., NULL);
int execle(char* path, char* arg0, ..., NULL, char** env);
int execlp(char* path, char* arg0, ... NULL);
int execlpe(char* path, char* arg0, ..., NULL, char** env);
int execv(char* path, char* argv[]);
int execve(char* path, char* argv[], char** env);
int execvp(char* path, char* argv[]);
int execvpe(char* path, char* argv[], char** env);
int spawnl(int mode, char* path, char* arg0, ..., NULL);
int spawnle(int mode, char* path, char* arg0, ..., NULL, char** env);
int spawnlp(int mode, char* path, char* arg0, ..., NULL);
int spawnlpe(int mode, char* path, char* arg0, ..., NULL, char** env);
int spawnv(int mode, char* path, char* argv[]);
int spawnve(int mode, char* path, char* argv[], char** env);
int spawnvp(int mode, char* path, char* argv[]);
int spawnvpe(int mode, char* path, char* argv[], char** env);
Функции вызывают на выполнение программу, имя которой указывается в переменной path. При этом для функций семейства exec происходит замещение в памяти вызывающей программы программой, вызываемой функцией. То есть если вызов функции прошел успешно, то вызывающая программа прекращает выполняться, и дальше выполняется вызываемая программа, которая после своего завершения передает управление ОС. Для функций семейства spawn режим работы задается параметром mode. В файле process.h объявлены макросы, задающие режимы вызова функций. Ниже в таблице перечислены имена и значения макросов и описание режимов работы функций семейства spawn.
Макрос |
Значение |
Режим работы |
P_WAIT |
0 |
Вызывающая программа приостанавливается и ждет, пока выполняется вызываемая программа, после завершения вызываемой программы продолжает выполняться вызывающая программа. |
P_OVERLAY |
2 |
Аналогично функциям семейства exec. |
Назначение остальных параметров и особенности выполнения различных функций зависит от суффиксов, присутствующих в имени функции. Ниже в таблице дана расшифровка суффиксов функций.
Суффикс |
Описание |
l |
Указатели типа char* на параметры командной строки вызываемой программы передаются раздельно |
v |
Указатели типа char* на параметры командной строки вызываемой программы передаются через массив указателей |
e |
В вызываемую программу передаются ее переменные окружения. Если суффикс e отсутствует, то вызываемая программа будет использовать переменные окружения вызывающей программы |
p |
Функция при поиске файла вызываемой программы будет использовать переменную окружения PATH |
При вызове все открытые в вызывающей программе файлы остаются открытыми в вызываемой программе.
В случае успешного вызова функция семейства exec не возвращается в вызываемую программу, а функция семейства spawn возвращает статус завершения программы (для программы на языке C это значение, которое возвращает функция main(), при правильном завершении работы программы это должен быть 0). В случае неудачного вызова функции семейства exec и spawn возвращают в вызывающую функцию 1 и записывают в переменную errno код ошибки. Для функций семейства exec возможны следующие ошибки, описанные соответствующими макросами: E2BIG, EACCES, EMFILE, ENOENT, ENOEXEC, ENOMEM. Для функций семейства spawn возможны следующие ошибки: E2BIG, EINVAL, ENOENT, ENOEXEC, ENOMEM.
Пример 1
Файл child.cpp
#include <stdio.h>
void main (void)
{
printf("\nSecond process");
}
Файл parent.cpp
#include <stdio.h>
#include <process.h>
#include <errno.h>
void main (void)
{
int res;
char path[]="C:\\WORK\\CHILD.EXE";
printf("\nParent process start");
res=execl(path,path,NULL);
printf("\nParent process finish %d",errno);
}
Файл child.exe должен находиться в каталоге C:\WORK. При запуске программы parent.exe на экран будет выведено следующее:
Parent process start
Second process
Пример 2
Файл child.cpp
#include <stdio.h>
int main (void)
{
printf("\nSecond process ");
return 0;
}
Файл parent.cpp
#include <stdio.h>
#include <process.h>
#include <errno.h>
void main (void)
{
int res;
char path[]="C:\\WORK\\CHILD.EXE";
printf("\nParent process start");
res=spawnl(P_WAIT,path,path,NULL);
if (res==-1)
printf("error code = %d",errno);
printf("\nParent process finish");
}
Файл child.exe должен находиться в каталоге C:\WORK. При запуске программы parent.exe на экран будет выведено следующее:
Parent process start
Second process
Parent process finish
Файл в ОС MS-DOS это именованный объект, в котором хранится информация. Файловая система это совокупность файлов и управляющей информации о файлах, а также набор программных средств ОС для доступа к файлам. MS-DOS поддерживает 3 типа файлов.
Для некоторых символьных устройств в MS-DOS используются стандартные зарезервированные имена.
Имя |
Устройство |
CON |
Консоль |
AUX или COM1 |
1-й порт последовательного адаптера |
COM2 |
2-й порт последовательного адаптера |
COM3 |
3-й порт последовательного адаптера |
COM4 |
4-й порт последовательного адаптера |
PRN или LPT1 |
1-й порт параллельного адаптера |
LPT2 |
2-й порт параллельного адаптера |
LPT3 |
3-й порт параллельного адаптера |
NUL |
Фиктивное устройство. EOF при попытке ввода с него, вывод в никуда |
При работе с символьными устройствами каждый драйвер организует работу с одним физическим устройством, при работе с блоковыми устройствами одно физическое устройство может быть использовано для организации нескольких логических устройств, обмен с которыми поддерживает один драйвер. Для доступа к подобным устройствам используются буквы латиницы (A,B для доступа в приводам гибких дисков, C и далее для доступа к жестким дискам).
Логическая структура файла представляет собой конечную последовательность байтов. Если к файлу организуется доступ, то с этой последовательностью связывается указатель чтения-записи это указатель на позицию в файле (потоке), куда будет произведено следующее обращение (чтение или запись) за данными. Данный указатель смещается автоматически при операциях чтения-записи, но может быть и установлен явно. Если указатель достиг конца файла, то ОС фиксирует эту ситуацию и запрещает дальнейшее перемещение указателя, генерируя код ошибки EOF при каждой новой попытке доступа. Смещение за конец файла возможно лишь при некоторых режимах записи в файл.
Возможно произвольное перемещение указателя чтения-записи в любую позицию в файле.
Доступ к файлу становится возможным только после его открытия, то есть проведения ОС определённых действий, приводящих к закреплению за этим файлом буферной области в ОЗУ и созданию специальной управляющей информации о нём. Эта информация записывается в структурную переменную, которая помещается в массив описаний открытых файлов, хранимый ОС. Обмен с файлом организуется с использованием ссылок (префиксов) на соответствующую структурную переменную. При открытии файла за ним закрепляется префикс (иногда называемый дескриптором). Физически префикс файла представляет собой смещение элемента типа char в таблице открытых файлов. Каждый элемент этой таблицы это ссылка на соответствующую этому файлу структурную переменную из массива открытых файлов, то есть смещение этой структурной переменной относительно начала массива. Схематически это представлено на рисунке 1.
Рис. 1
Допустимы следующие операции.
При окончании работы с файлом производится его закрытие, разрушается служебная информация о нём, ОС записывает при необходимости содержимое буферной области в файл и освобождает буферную область, обновляя информацию в директории, в который входит этот файл.
Стандартные символьные устройства автоматически открываются ОС при запуске любой программы и закрываются при её завершении, поэтому их не надо открывать программными средствами.
А также другие работы, которые могут Вас заинтересовать | |||
49348. | Поиск неисправностей на аппаратуре СВ и РМ | 792.06 KB | |
При попытке остановить усеченный тест по адресу заданной команды по условию ОСТАНОВ ПО КОМАН набранной на ПОУ программа не останавливается. Краткое описание тракта прохождения сигнала В состав СВ входят следующие основные устройств: Вычислительной устройство ВчУ Устройство обмена УО Устройство управления внутренним магистральным каналом УК Долговременное запоминающее устройство ДЗУ Э 8КЛ Оперативное запоминающее устройство ЗУ02 Внутренний магистральный канал ВМК Пульт оперативного управления СВ ПОУ СВ Взаимодействие... | |||
49349. | Порядок разрешения земельных споров | 78 KB | |
Права и обязанности землевладельцев, землепользователей и собственников земельных участков возникают из юридических фактов. Права возникают с момента наступления события или совершения действия. Отдельные виды прав возникают с момента их государственной регистрации... | |||
49350. | Написание программы на языке программирования Паскаль для решения задачи | 257.15 KB | |
С помощью языка программирования системы Maple решается задача интегрирования дифференциального уравнения (задача Коши) методом (по варианту задания). Окончательные вычисления в программе зависят от результатов расчета программы в Delphi (следующий пункт). Образец выполнения задания – файл RUTTA.mws. | |||
49351. | Разработка конструкции механизма поворота для подвода и отвода пушки | 588.42 KB | |
Разработка конструкции механизма поворота для подвода и отвода пушки. В результате выполнения задания по курсовому проектированию разработана конструкция механизма поворота для подвода и отвода пушки. В работе приведен обзор и анализ известных конструкций машин для забивки чугунной летки описание конструкции механизма поворота. | |||
49353. | Локализация поломок на аппаратуре СВ и РМ | 1.09 MB | |
Краткое описание тракта прохождения сигнала Алгоритм поиска неисправности: на структурном уровне на функциональном уровне на принципиальном уровне Заключение Список использованной литературы Задание на курсовое проектирование Неисправность обнаружена на АРМ РМ10 и имеет внешние проявления: яркая засветка экрана ЭЛТ БИО. Эти аналоговые сигналы поступают на блоки БИО и БИВ где обеспечивается отклонение луча... | |||
49354. | ЦИФРОВЫЕ СИСТЕМЫ ПЕРЕДАЧИ НЕПРЕРЫВНЫХ СООБЩЕНИЙ | 777.15 KB | |
Вид модуляции сигнала во второй ступени ЧМ. С учётом заданного вида модуляции сигнала определить его параметры характеризующие форму и требуемое значение полосы пропускания приёмного устройства. По полученному значению вероятности ошибки по формулам потенциальной помехоустойчивости найти минимальное значение отношения мощностей сигнала и помехи необходимое для обеспечения допустимого уровня искажения кода за счёт действия помех. Рассчитать требуемое значение полосы приёмника при использовании сложного сигнала. | |||
49355. | Методы логического и физического кодирования | 292.4 KB | |
В процессе выполнения задания необходимо выполнить логическое и физическое кодирование исходного сообщения в соответствии с заданными методами кодирования провести сравнительный анализ рассматриваемых методов кодирования выбрать и обосновать наилучший метод для передачи исходного сообщения. ЭТАПЫ РАБОТЫ Формирование сообщения В качестве исходного сообщения подлежащего передаче используются фамилия и инициалы студента выполняющего задание. Для цифрового представления сообщения необходимо использовать SCIIкоды. Определить длину сообщения. | |||
49356. | Методы локализации неисправностей в аппаратуре СВ и РМ | 196.92 KB | |
Задано внешнее проявление неисправности: отсутствует развертка на экране БИО по координате Х. Эти аналоговые сигналы поступают на блок БИО где обеспечивают отклонение луча ЭЛТ из центра в необходимое место экрана а ИПТ обеспечивает подсвет отклоненного луча.3 Блок индикатора основной Блок индикатора основной БИО предназначен для: стабилизации вторичной информации о воздушной обстановке; отображение результатов целераспределения состояния боевой готовности и этапов ведения боевых действий подчиненными огневыми средствами;... | |||