Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 18, М.: Диалог-МИФИ, 1995, 254 стр.

[Назад] [Содеожание] [Дальше]

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.

[Назад] [Содеожание] [Дальше]