
- •41. Программные семафоры с внутренним счетчиком в posix
- •Int sem_init(sem_t *sem, int pshared, int value);
- •42. Программные семафоры с внутренним счетчиком в System V
- •43. Проблема тупиков при взаимодействии программных единиц
- •44. Средства реализации виртуальной памяти; страничная переадресация.
- •45. Средства реализации виртуальной памяти; стратегия подкачки страниц
- •46. Системные функции распределения памяти в Unix
- •Void* malloc(size_t nbytes)
- •Void* MapViewOfFile(handle hFileMappingObject, dword DesiredAccess, dword OffsetHigh, dword OffsetLow, dword size)
- •49. Совместное использование оперативной памяти в Unix
- •Int shmget(key_t key, int size, int flag),
- •53. Программный опрос файловой системы в Windows
- •54. Программный опрос файловой системы в Unix
- •Int closedir(dir* dirptr),
- •Void rewinddir(dir* dirptr),
- •55. Получение информации об ошибках выполнения системной функции Windows
- •56. Получение информации об ошибках выполнения системной функции Unix.
- •Int имяфункции(список_аргументов),
- •Void perror(const char *s)
- •57. Групповое выполнение и фоновый запуск команд в командных оболочках ос.
- •59. Использование переменных в командных оболочках ос.
- •60. Ввод и вывод данных в командных сценариях.
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.