Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа №9

Читайте также:
  1. A) дохода лица, работающего по найму и b) дохода самозанятого лица.
  2. III. Работа над темой
  3. Quot;Бедные и средний класс работают ради денег". "Богатые заставляют деньги работать на себя".
  4. Quot;РАБОТА" ЛЮБВИ
  5. V. Самостоятельная работа студентов.
  6. V.Игра «Мы работаем на фабрике».
  7. VIII. Самостоятельная работа студентов

Тема: «Реализация функций API на уровне ОС»

(2 часа)

При реализации функций API на уровне ОС за их выполнение ответственность несет ОС. Объектный код, выполняющий функции, либо непосредственно входит в состав ОС (или даже ядра ОС), либо поставляется в составе динамически загружаемых библиотек, разработанных для данной ОС. Система программирования ответственна только за то, чтобы организовать интерфейс для вызова этого кода.

В таком варианте результирующая программа обращается непосредственно к ОС. Поэтому достигается наибольшая эффективность выполнения функций API по сравнению со всеми другими вариантами реализации API.

Недостатком организации API по такой схеме является практически полное отсутствие переносимости не только кода результирующей программы, но и кода исходной программы. Программа, созданная для одной архитектуры вычислительной системы, не сможет исполняться на вычислительной системе другой архитектуры даже после того, как ее объектный код будет полностью перестроен. Чаще всего система программирования не сможет выполнить перестроение исходного кода для новой архитектуры вычислительной системы, поскольку многие функции API, ориентированные на определенную ОС, будут в новой архитектуре просто отсутствовать.

Таким образом, в данной схеме для переноса прикладной программы с одной целевой вычислительной системы на другую будет требоваться изменение исходного кода программы.

Переносимости можно было бы добиться, если унифицировать функции API в различных ОС. С учетом корпоративных интересов производителей ОС такое направление их развития представляется практически невозможным. В лучшем случае при приложении определенных организационных усилий удается добиться стандартизации смыслового (семантического) наполнения основных функций API, но не их программного интерфейса.

Хорошо известным примером API такого рода может служить набор функций, предоставляемых пользователю со стороны ОС типа Microsoft Windows – WinAPI (Windows API). Надо сказать, что даже внутри этого корпоративного API существует определенная несогласованность, которая несколько ограничивает переносимость программ между различными ОС типа Windows. Еще одним примером такого API можно считать набор сервисных функций ОС типа MS-DOS, реализованный в виде набора подпрограмм обслуживания программных прерываний.

В современных сложных приложениях часто недостаточно работать с одним файлом – необходимо иметь возможность работать с файловой системой, поддерживающей эти файлы. Хотя С++ предусматривает ряд некоторых структур высокого уровня, помогающих работать с файловыми системами, большинство из них относится к категории интерфейсов экспонируемых (т. е. определенных в качестве доступных) API операционной системы, используемых программистом.

Для работы с файловой системой используются в числе прочих следующие функции API Win32: FindFirstFile(), FindFirstFileEx(), FindNextFile(). Все эти функции работают со структурой WIN32_FIND_DATA. Структура содержит 10 полей:

typedef struct WIN32_FIND_DATA{

DWORD dwFileAttributes;

FILETIME ftCreationTime;

FILETIME ftLastAccessTime;

FILETIME ftLastWriteTime;

DWORD nFileSizeHigh;

DWORD nFileSizeLow;

DWORD dwReserved0;

DWORD dwReserved1;

CHAR cFileName[MAX_PATH];

CHAR cAltenateFileName[14];

}

В таблице 1 приведено детальное описание структуры.

Таблица 1.

элемент Описание
dwFileAttributes Специфицирует атрибуты файлового объекта. Атрибуты, файла описывают, какой разрешен доступ к нему, файл это или каталог и т.д. Этот элемент может содержать одно или несколько значений, описанных в таблице 2.
ftCreationTime Содержит структуру FILETIME (64-битное значение, представляющее число 100-наносекундных интервалов, прошедших с 1-го января 1601 г.), специфицирующую время первоначального создания файла операцион­ной системой. Структура имеет 2 элемента DWORD, которые функции Find устанавливают в 0, если файловая система, содержащая файл, не поддерживает этот элемент.
ftLastAccessTime Содержит структуру FILETIME, специфицирующую время последнего обращения пользователя к файлу. Как и в случае ftCreationTime, оба ее элемента содержат 0, если файловая система не предусматривает этой информации.
ftLastWriteTime Содержит структуру FILETIME, специфицирующую время, когда поль­зователем или процессом производилась последняя запись в файл. Как и в случае ftCreationTime и ftLastAccessTime, оба ее элемента содер­жат 0, если файловая система не предусматривает этой информации.
nFileSizeHigh Размер файла сохраняется операционной системой в двух значениях DWORD, которые комбинируются в соответствии с формулой (nFileSizeHigh * MAXDWORD) + nFileSizeLow, которая дает полный размер файла. (MAXDWORD обычно р но 232-1.) Данный элемент специфицирует старшую часть paj ла; он равен 0, если только размер файла не больше MAXDW
nFileSizeLow Специфицирует младшую часть размера файла. Такая структураиз двух DWORD позволяет файлу иметь размер порядка терабайт.
dwReserved0, dwReservedl Зарезервировано корпорацией Microsoft для будущего использования.
cFileName Ограниченная нулем строка, содержащая длинное имя файла. Его длина всегда меньше МАХРАТН, системной константы, равной обычно 255 или 260.
cAlternateFileName Ограниченная нулем строка, содержащая альтернативное имя. Это имя представлено в классическом формате 8.3 (filename.ext). Используйте этот элемент, если вы не уверены, поддерживает ли каждая функция или система, обращающиеся к файлу, длинные имена.

Как указано в таблице 1, элемент dwFileAttributes может содержать одно или комбинацию из нескольких значений констант, характеризующих свойства файла. Эти константы перечислены и описаны в таблице 2.

Таблица.2. Значения констант для dwFileAttributes

Константа Описание
FILE_ATTRIBUTE_ARCHIVE Приложение используют данное значение, чтобы пометить файл для резервного копирования или удаления. Всякий раз, когда файл изменяется, Windows устанавливает архивный бит. Когда программа резервного копирования архивирует файл, она сбрасывает данный бит.
FILE_ATTRIBUTE_COMPRESSED Для файла атрибут означает, что все данные в нем сжаты, т.е. это файл ZIP или он имеет подобный сжатый формат. Для каталога атрибут означает, что для новых файлов и подкаталогов сжатие выполняется по умолчанию (т.е. операционная система или какое-то инструментальное средство сжимает новые файлы и подкаталоги во время создания)
FILE_ATTRIBUTE_DIRECTORY Файловый объект соответствует каталогу или папке, – т.е. это логический объект операционной системы, не содержащий собственных данных, а служащий инструментом для организации других объектов.
FILE_ATTRIBUTE_HIDDEN Файл является скрытым, т. е. он не включается в обычный листинг каталога, этот атрибут обычно используется системными, вспомогательными или другими файлами, которые разработчик приложения хочет защитить от случайного обнаружения.
FILE_ATTRIBUTE_NORMAL Файл обычный, допускающий чтение/запись, не скрытый и не системный. Короче, это означает, что все другие атрибуты файла не установлены и, таким образом, данное значение действительно только в случае, если используется оно одно.
FILE_ATTRIBUTE_OFFLINE Данные файла не являются непосредственно доступными. Показывает, что данные были физически перемещены для внешнего хранения. Этот атрибут используется крайне редко, только в некоторых сетевых средах.
FILE_ATTRIBUTE_READONLY Файл допускает только чтение. Приложения могут его читать, но не могут модифицировать или удалить. Приложение, которому требуется это делать, должно либо обнулить сначала данный бит, либо сохранить файл под другим именем.
FILE_ATTRIBUTE_SYSTEM Файл является частью операционной системы (например, динамической библиотекой) либо используется исключительно операционной системой (например, ядро операционной системы). Вообще модификация системных файлов – небезопасное занятие, потому что в результате, Windows может начать работать неправильно или даже перестанет загружаться.
FILE_ATTRIBUTE_TEMPORARY Файл используется для временного хранения. Этот атрибут присваивается файлу, если он создается функцией tmpfile() или любой из функций Windows для временных файлов, таких, как tmpnam() и _tempnam() Временные файлы, созданные приложением, не являются «стабильными» – они должны быть стерты приложением при завершении.

Если файл имеет длинное имя, полный его вариант будет находиться в cFileName. API в этом случае возвратит классический (формат 8.3), усеченный его вариант в поле cAlternateFileName. Если операционная сися не поддерживает длинные имена файлов либо в данном случае файл это имя не использует, элемент cAlternateFileName будет пустым, a cFtleName будет содержать имя в формате 8.3. Чтобы получить версию имени _ 8.3, вы можете также вызвать функцию API GetShortPathName(), которая возвращает 12-символьную форматированную строку.


Дата добавления: 2015-07-11; просмотров: 109 | Нарушение авторских прав


Читайте в этой же книге: Лабораторная работа №1 | Лабораторная работа №2 | Лабораторная работа №3 | Лабораторная работа №6 | Лабораторная работа №7 | Задание на выполнение |
<== предыдущая страница | следующая страница ==>
Лабораторная работа №8| Лабораторный практикум

mybiblioteka.su - 2015-2024 год. (0.011 сек.)