Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (41-64).docx
Скачиваний:
201
Добавлен:
15.06.2014
Размер:
39.72 Кб
Скачать

Int closedir(dir* dirptr),

Вспомогательной функцией работы с каталогами служит функция, описываемая прототипом

Void rewinddir(dir* dirptr),

которая позволяет вернуться к началу каталога с целью чтения его опять с самого начала.

55. Получение информации об ошибках выполнения системной функции Windows

Для получения кода ошибки в MS Windows программисту приходится принимать немалые дополнительные усилия. Если по возвращаемому значению системной функции определяется, что ошибка есть, следует немедленно вызывать специальную функцию GetLastError(), которая возвращает послед­нюю ошибку, возникшую в ходе выполнения программы (точнее нити програм­мы). Собственно коды ошибок, общие для всех системных функций, содержатся в заголовочном файле WinError.h. Отличительной и не очень приятной особенностью MS Windows является от­сутствие информации о возможных кодах ошибки для конкретных функций. Если требуется распознавание вида ошибки при автоматическом выполнении программы, то раз­работчики этой ОС предлагают для использования специальную функцию FormatMesssage, в конечном счете эта функция делает почти то же самое, что и функция strerror в Unix, но сложность использования функции FormatMessage неизмеримо больше. Прежде всего она имеет прототип

len=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,

NULL, k, // k - номер ошибки, возвращенный функцией GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), txtmess, sizeof(txtmess), NULL);

Главным по значению является третий её аргумент dwMessageld, который и задает распознаваемый код ошибки, адрес буфера для текста задается в аргументе IpBuffer, а его размер в аргументе nSize. Важным в применении является и первый аргумент, который дает возмож­ность использовать не только системные, но и пользовательские коды ошибок. Для системных ошибок в аргументе dwFlags должно присутствовать логическое слагаемое FORMAT_MESSAGE_FROM_SYSTEM. dwLanguageld обеспечивает Много­языковую поддержку сообщений.

56. Получение информации об ошибках выполнения системной функции Unix.

Наиболее традиционно эта проблема решается в Unix. Большинство системных функций Unix имеют вид

Int имяфункции(список_аргументов),

возвращая в качестве основного значения целое число. Это число может нести значение, определяющее результат действия функции, но одно из значений (обычно -1), зарезервировано за условным кодом ошибки.

Другой формой контроля ошибок в Unix является специальная переменная errno. Для основных функций операционной системы Unix код ошибки неявно заносится в эту специальную глобальную переменную, описанную в заголовочном файле errno.h. Такой прием дает принципиальную возможность анализировать значение этой переменной после обращения к системной функции. Но делать это следует сразу же после системного вызова, так как следующий системный вызов, в свою очередь, изменяет эту переменную.

Практическое использование значений переменной ошибок errno достигается с помощью вспомогательных функций perror() и strerror(). Первая из них имеет прототип

Void perror(const char *s)

char *strerror(int errnum)

Вторая функция возвращает указатель на текст, описывающий ошибку, а первая непосредственно отображает в стандартном потоке ошибок этот текст, причем предваряемый любой пользовательской текстовой информацией, которая содержится в аргументе s.

Соседние файлы в папке Экзамен