Операционные системы - статьи


Что показалось плохим - часть 2


В дополнение к сложности, вторым плохим свойством API Win32 является его неполнота. Хендлы могут наследоваться одним процессом от другого или дублироваться, но отсутствует функция API, которая позволила бы по заданному хендлу определить его тип. Хотя функции ReadFile() и WriteFile() могут выполнять через хендл асинхронный ввод/вывод (только в Windows NT), этот хендл должен быть создан через вызов CreateFile() с флагом FILE_FLAG_OVERLAPPED. Более того, если хендл был создан с использованием этого флага, то синхронный ввод/вывод через этот хендл невозможен. При наличии этих ограничений отсутствуют функции API, которые позволили бы переустановить флаги или хотя бы узнать, какие флаги использовались при создании хендла.

Другим примером неполноты является невозможность управлять полным пространством имен файлов. В дополнение к отсутствию возможности создания каталогов и, в меньшей степени, файлов с именами, различающимися регистром букв, в интерфейсе Win32 не допускаются такие имена файлов как aux.c и com0.sh. Невозможно обеспечить доступ или создать файлы, которые заканчиваются точкой. API Win32 не обеспечивает вызов для создания жесткой ссылки, хотя в самой файловой системе NTFS такая возможность имеется.

Третим аспектом Win32, который автор считает плохим, является отсутствие согласованности. Этот аспект можно было бы считать "неприятным", а не "плохим", если бы он не являлся источником ошибок и не приводил к потребности траты времени на чтение руководств. В ОС UNIX тоже часто встречается несогласованность, и похоже, что разработчики Win32 не старались учиться на чужих ошибках. Одна из областей несогласованности API Win32 - это значения, возвращаемые функциями. Например, CreateFile() возвращает -1 при ошибке и хендл в противном случае. Функция CreateEvent() возвращает 0 при ошибке и хендл в противном случае. Функция RegCreateKey() возвращает код ошибки, а передается ей адрес хендла.

Использование аргументов тоже является несогласованным. Первым аргументом функции OpenProcess() является желаемый режим доступа.


Начало  Назад  Вперед



Книжный магазин