- •1.1. Основные компоненты операционной системы
- •1.2. Процесс загрузки операционной системы
- •1.3. Состав и общая схема работы ms-dos
- •1.4. Обзор прерываний bios
- •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.