- •1. Структура и принципы работы ms-dos
- •1.1. Основные компоненты операционной системы
- •Msdos.Sys
- •Command.Com
- •Config.Sys
- •Autoexec.Bat
- •Wina20.386
- •Драйверы
- •Внешние команды
- •Подготовка системной дискеты
- •Программа fdisk
- •Резидентные программы
- •1.2. Процесс загрузки операционной системы
- •1.3. Состав и общая схема работы ms-dos
- •Файловая система
- •Система управления памятью
- •Система управления программами
- •Система связи с драйверами устройств
- •Система обработки ошибок
- •Служба времени
- •Работа с консолью оператора
- •Другие системы ms-dos
- •1.4. Обзор прерываний bios
- •Определение конфигурации компьютера
- •Определение объема оперативной памяти
- •Работа с видеоконтроллером
- •Выбрать видеорежим (00h)
- •Установить размеры и форму курсора (01h)
- •Свернуть окно (06h, 07h)
- •Работа с клавиатурой
- •Обслуживание дисковой подсистемы
- •Перезагрузка операционной системы
- •Системный сервис для машин класса at
- •1.5. Обзор прерываний ms-dos
- •Получение системной информации
- •Символьный ввод и вывод
- •Работа с файловой системой
- •Управление программами
- •Управление памятью
- •Связь с драйверами устройств
- •Другие функции
- •1.6. Обработка ошибок
- •1.7. Вызов прерываний ms-dos
- •1.8. Программа errcode
- •1.9. Переменная errno
- •1.10. Программа errno
1.10. Программа errno
Приведем пример программы ERRNO (листинг 1.2), обрабатывающей ошибки с использованием переменной errno. При запуске вы должны передать этой программе параметр - имя любого существующего файла.
Листинг 1.2. Файл errno\errno.cpp
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#pragma argsused
void main(int argc, char *argv[])
{
FILE *stream;
// Открываем файл только для чтения
stream = fopen(argv[1], "r");
// Если произошла ошибка, выводим сообщение
if((stream == NULL) || (ferror(stream)))
{
perror("Не могу открыть файл");
printf("\nНажмите любую клавишу...");
getch();
exit(errno);
}
// Пытаемся выполнить запись в файл, который
// открыт только для чтения. Это приведет к ошибке.
fprintf(stream, "Пишем в файл\n");
if((stream == NULL) || (ferror(stream)))
{
// Выводим сообщение об ошибке двумя способами -
// с помощью функции perror и strerror
perror("Запись в защищенный файл");
printf("Запись в защищенный файл: %s\n",
strerror(errno));
exit(errno);
}
printf("\nНажмите любую клавишу...");
getch();
exit( 0 );
}
Программа открывает файл при помощи функции fopen, передавая ей в качестве последнего параметра строку "r". В результате файл будет открыт только для чтения.
Если файл не удалось открыть, на консоль с помощью функции perror выводится сообщение об ошибке, вслед за чем работа программы завершается.
Если файл открыт успешно, программа пытается записать в него текстовую строку, вызывая для этого функцию fprintf. Так как файл открыть только для чтения, неизбежно возникнет ошибка. Описание этой ошибки будет выведено на консоль два раза с помощью функций perror и printf. В последнем случае текстовое описание ошибки будет получено при помощи функции stderror.