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 – это именованный объект, в котором хранится информация. Файловая система – это совокупность файлов и управляющей информации о файлах, а также набор программных средств ОС для доступа к файлам. MS-DOS поддерживает 3 типа файлов.

  1.  Регулярный файл – это обычный файл на диске. Физически он состоит из совокупности блоков фиксированной длины (секторов).
  2.  Специальный символьный файл – логическое представление драйвера символьного внешнего устройства.
  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

Допустимы следующие операции.

  1.  Неоднократное открытие файла, каждый раз для него будет создаваться новый префикс и создаваться дубль описания.
  2.  Дублирование префиксов и описания.
  3.  Передача существующим префиксам описаний других файлов.

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

Стандартные символьные устройства автоматически открываются ОС при запуске любой программы и закрываются при её завершении, поэтому их не надо открывать программными средствами.


 

А также другие работы, которые могут Вас заинтересовать

46858. Рисование. Уроки рисования. Рисование карандашом. Рисование лиц карандашом 11.89 MB
  Эти уроки рисования карандашом и этот сайт о рисовании станут для Вас основой в увлекательном процессе обучения и вы поймёте как научиться рисовать. Очень хорошо, что вся человеческая раса, каждый мужчина, женщина и дети имеют неповторимые индивидуальные черты лица. Если бы лица были одинаковыми, как бирки на баночках с томатами
46860. Рыночная система и рыночный механизм. Статистика занятости и безработицы 34.56 KB
  Страховой рынок :экономическая природа. Страховой рынок это форма организации денежных отношений по формированию и распределению страхового фонда для обеспечения страховой защиты общества как совокупность страховых организаций которые принимают участие в оказании соответствующих услуг. Страховой рынок формируется в ходе становления товарного хозяйства и является его неотъемлемым и важным элементом. Страховой рынок предполагает самостоятельность субъектов рыночных отношений их равноправное партнерство по поводу куплипродажи страховой...
46863. Менеджмент в книжном деле 34 KB
  Функциональные области внутренней среды издательства: кадровая – обеспечение человеческими ресурсами подготовка оплата условия найма. Важную роль в успешном функционировании внутренней среды издательства играет информация объективно отражающая развитие производственного процесса. Функциональные области внешней среды: социальная – рост населения развитие культуры образования и т. Компоненты внешней среды прямого воздействий макросреды: акционеры конкуренты поставщики потребители местные органы правительственные органы.
46866. Учебная деятельность как ведущая деятельность в младшем школьном возрасте 34 KB
  Учебная деятельность как ведущая деятельность в младшем школьном возрасте. Учебная деятельность – это деятельность непосредственно направленная на усвоение знаний и умений выработанных человечеством. Учебная деятельность является ведущей деятельностью в младшем школьном возрасте она опосредует всю систему отношений ребенка с обществом в ней формируются не только отдельные психические качества но и личность младшего школьника в целом. Предметом изменений в учебной деятельности становится сам ребенок сам субъект осуществляющий эту...