Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2050

.pdf
Скачиваний:
0
Добавлен:
15.11.2022
Размер:
1.12 Mб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Воронежский государственный технический университет»

А. В. Питолин

РАЗРАБОТКА ПРОГРАММНЫХ СРЕДСТВ ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ ТЕХНИЧЕСКИХ СРЕДСТВ САПР

Утверждено учебно-методическим советом университета в качестве учебного пособия

Воронеж 2018

УДК 681.3(075.8)

ББК 32.972.13я7

П352

Рецензенты:

Воронежский институт высоких технологий (г. Воронеж) (проректор по информационным технологиям,

канд. техн. наук, доцент Ю. П. Преображенский); канд. техн. наук, проф. С. М. Пасмурнов

Питолин, А. В.

Разработка программных средств информационного взаимодействия технических средств САПР: учеб. пособие П352 [Электронный ресурс]. – Электрон. текстовые и граф. данные (948 Кб) / А. В. Питолин. - Воронеж: ФГБОУ ВО «Воронежский государственный технический университет», 2018. – 1 электрон. опт. диск (CD-ROM): цв. – Систем. требования: ПК 500 и выше; 256 Мб ОЗУ; Windows XP; SVGA с разрешением 1024x768; Adobe Acrobat; CD-ROM дисковод;

мышь. – Загл. с экрана.

ISBN 978-5-7731-0669-2

В учебном пособии рассмотрены вопросы разработки программных средств информационного взаимодействия технических средств САПР.

Издание соответствует требованиям Федерального государственного образовательного стандарта высшего образования по направлению 09.03.01 «Информатика и вычислительная техника» (профиль «Системы автоматизированного проектирования»), дисциплине «Разработка САПР».

Табл. 5. Библиогр.: 6 назв.

 

УДК 681.3(075.8)

 

ББК 32.972.13я7

ISBN 978-5-7731-0669-2

© Питолин А. В., 2018

 

© ФГБОУ ВО «Воронежский

 

государственный технический

 

университет», 2018

ВВЕДЕНИЕ

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

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

3

1.ФАЙЛОВАЯ И ДИСКОВАЯ СИСТЕМЫ

1.1.Размещение файлов. Правила именования файлов

Одним из важнейших аспектов любой операционной системы является работа с файлами. В операционной системе Windows функции доступа к файлам и дискам значительно расширены по сравнению с MS-DOS за счет использования 32-разрядных чисел и поддержки сразу несколько файловых систем: FAT (file allocation table, таблица размещения файлов), NTFS (файловую систему NT) и CDFS (файловая система CDROM).

Основными файловыми системами Windows являются FAT и NTFS. FAT позволяет присваивать каталогам и файлам имена до 255 символов длиной. Эти имена хранятся на диске в кодировке Unicode, а это значит, что они не нарушаются при копировании в системы, использующие другие языки. Еще одна особенность файловой системы FAT в том, что с каждым файлом в ней связаны 3 временные метки: время создания файла, время последнего к нему обращения и время последней модификации. NTFS совместима с FAT и имеет свои дополнительные особенности. NTFS позволяет восстанавливать данные после сбоя системы, работает с внешними носителями высокой емкости, различает регистр букв в именах файлов. В NTFS добавлены средства защиты файлов от вирусов (введен атрибут файла "только для исполнения").

Поскольку Win32 поддерживает несколько файловых систем, все они должны подчиняться общим правилам. Файловые системы должны организовывать файлы в иерархическое дерево каталогов так, как это делает FAT. Имена каталогов и файлов в полном имени файла (pathname) отделяются обратной косой чертой (\). Кроме правил формирования полного имени, действуют и правила именования каталогов и файлов:

полное имя файла завершается нулевым символом;

4

имена файлов и каталогов не должны содержать разделительного символа (\), символов с ASCII-кодами от 0 до 31, специальных символов вроде (<,>,:," или | /), а также символов, явно запрещенных в какой-либо файловой системе; имена файлов и каталогов могут включать буквы разного регистра, но при поиске файлов и каталогов регистр букв не учитывается. Если файл с именем ReadMe.Txt существует, то создание нового файла с именем

README.TXT уже не допускается;

точка (.) идентифицирует текущий каталог. Например, .\ README.TXT означает, что файл README.TXT находится в текущем каталоге;

две точки (..) идентифицируют родительский каталог. Например, ..\ README.TXT означает, что файл README.TXT находится в родительском каталоге текущего каталога;

точка (.), используемая как часть имени файла или каталога, считается разделителем компонентов имени. Например, в файле README.TXT точка отделяет имя файла от его расширения.

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

Разрабатывая Win32-приложения, необходимо помнить, что пользователь может работать с любой комбинацией FAT, NTFS и CDFS, а также то, что в будущем появятся другие файловые системы. Любая из новых файловых систем будет следовать базовым правилам, и, приложив минимум дополнительных усилий, можно писать программы, корректно работающие независимо от файловой системы.

5

1.2.Функции Win32 API получения информации о файлах

идисках

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

Функции получения информации о диске:

GetLogicalDrives;

GetLogicalDriveStrings;

GetDriveType;

GetVolumeInformation;

GetDiskFreeSpace.

Функция GetLogicalDrives не имеет входных параметров и возвращает 32-битовое число, каждый бит которого, установленный в единицу, свидетельствует о наличии в системе соответствующего диска (0-й бит - диск А, 1-й бит - диск B и т.д.).

Синтаксис: DWORD GetLogicalDrives(void)

Функция GetLogicalDriveStrings в отличие от

GetLogicalDrives позволяет получить массив символьных строк, представляющих собой имена дисков. Каждая строка заканчивается символом <null> так же, как и весь массив строк. Например: "a:\\<null>", "c:\\<null>", "d:\\<null>"<null>.

Функция возвращает размер буфера, необходимый для хранения строк с именами дисков.

Синтаксис: DWORD GetLogicalDriveStrings(dwBuffer, lpBuffer)

6

DWORD dwBuffer; // размер буфера для текстовой строки LPTSTR lpBuffer; // указатель на буфер

Функция GetDriveType предназначена для определения типа диска. Возвращается одно из следующих значений типа unsigned int:

0 - Диск не может быть определен.

1 - Корневая директория не существует.

DRIVE_REMOVABLE - Гибкий диск. DRIVE_FIXED - Жесткий диск.

DRIVE_REMOTE - Удаленный (сетевой) диск.

DRIVE_CDROM - Компакт-диск (CD-ROM). DRIVE_RAMDISK - - Виртуальный диск.

Синтаксис: UINT GetDriveType(lpDiskName)

LPCTSTR lpDiskName; // указатель на имя диска

GetVolumeInformation позволяет получить информацию о файловой системе выбранного диска и возвращает значение true при корректном завершении функции. Функции должны быть переданы указатели на переменные, для которых заранее выделена память и размеры буферов для получаемой информации. Пользователю необходимо определить имя диска и размеры буферов для метки диска и для названия системы, остальные переменные являются выходными.

Синтаксис: BOOL GetVolumeInformation(lpDiskName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)

LPCTSTR lpDiskName;// указатель на имя диска

LPTSTR lpVolumeNameBuffer;// указатель на метку диска

DWORD nVolumeNameSize;// размер буфера для метки диска LPDWORD lpVolumeSerialNumber;// указатель на серийный номер диска

7

LPDWORD lpMaximumComponentLength;//указатель на максимальную длину имени файла(вместе с путем) LPDWORD lpFileSystemFlags;// указатель на флаги системы

LPTSTR lpFileSystemNameBuffer;// указатель на название системы DWORD nFileSystemNameSize;//размер буфера для названия системы

GetDiskFreeSpace предназначена для получения информации об объеме диска и количестве хранимой информации. Необходимо задать лишь имя диска и при успешном исполнении функция выдает значение true.

Cинтаксис: BOOL GetDiskFreeSpace(lpDiskName, lpSectorsPerCluster, lpBytesPerSector, lpFreeClusters, lpClusters)

LPCTSTR lpDiskName;// указатель на имя диска

LPDWORD lpSectorsPerCluster;// указатель на количество секторов в кластере

LPDWORD lpBytesPerSector;// указатель на количество байт в секторе

LPDWORD lpFreeClusters;// указатель на количество свободных кластеров

LPDWORD lpClusters;// указатель на количество кластеров

Функции получения информации о файлах и каталогах:

GetCurrentDirectory;

GetFullPathName;

GetFileAttributes;

GetFileSize;

FindFistFile;

FindNextFile.

GetCurrentDirectory показывает текущую директорию, то есть ту директорию, в которой осуществляется обращение к файлу с "сокращенным именем" (без полного пути). Функция возвращает размер буфера, необходимый для хранения текущей директории.

Синтаксис: DWORD GetCurrentDirectory(dwCurDir, lpCurDir)

8

DWORD dwCurDir;// размер буфера

LPTSTR lpCurDir;// указатель на буфер для текущей директории

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

Синтаксис: DWORD GetFullPathName(lpFile, dwPath, lpPath, ppFilePart)

LPCTSTR lpFile;// указатель на имя файла

DWORD dwPath;// длина буфера для полного пути к файлу LPTSTR lpPath;// указатель на полный путь к файлу (вместе с именем)

LPTSTR *ppFilePart;// указатель на указатель на имя файла в полном пути

GetFileAttributes позволяет вывести информацию об атрибутах файла в виде 32-битового значения. Присвоение файлу атрибутов осуществляется функцией SetFileAttributes.

Синтаксис: DWORD GetFileAttributes(lpFileName)

LPCTSTR lpszFileName;// указатель на имя файла

GetFileSize помогает получить размер файла. Использованию данной функции должно предшествовать получение идентификатора управления, связанного с файлом HANDLE, например, при помощи функции CreateFile (после завершения работы необходимо выполнить функцию CloseHandle). Функция возвращает младшую часть размера файла (32 бита из 64), старшую часть при необходимости можно получить, задав в качестве одного из параметров указатель на беззнаковое целое (32 бита). Если предполагаемый размер файла не превышает значение 0xFFFFFFFF, то вместо указателя на старшую часть размера файла можно передавать NULL.

9

Синтаксис: DWORD GetFileSize(hFile, lpdwFileSizeHigh)

HANDLE hFile;// идентификатор управления

LPDWORD lpdwFileSizeHigh;// указатель на старшую часть (32бита) размера файла

FindFirstFile производит поиск первого файла, соответствующего маске поиска. Функция возвращает идентификатор управления поиска. Входным параметром для функции является только маска поиска файла.

Синтаксис: HANDLE FindFirstFile(lpSearchFile, lpffd)

LPCTSTR lpSearchFile; // указатель на маску поиска LPWIN32_FIND_DATA lpffd; // указатель на атрибуты и свойства найденного файла

typedef struct _WIN32_FIND_DATA {

DWORD dwFileAttributes; // атрибуты файла

FILETIME ftCreationTime; // время создания файла FILETIME ftLastAccessTime; // время последнего обращения к файлу

FILETIME ftLastWriteTime; // время последней записи файла DWORD nFileSizeHigh; // старшая часть размера файла DWORD nFileSizeLow; // младшая часть размера файла DWORD dwReserved0; // зарезервированно

DWORD dwReserved1; // - - - // -

TCHAR cFileName[ MAX_PATH ]; // имя файла TCHAR cAlternateFileName[ 14 ]; // имя в формате 8.3 } WIN32_FIND_DATA;

FindClose закрывает идентификатор управления поиска, открытый функцией FindFirstFile.

Синтаксис: BOOL FindClose(hFindFile)

HANDLE hFindFile; // идентификатор поиска файла

FindNextFile продолжает поиск файла, начатый вызовом функцией FindFirstFile. Возвращает признак успешного выполнения функции (true/false). Входным параметром является идентификатор управления поиска.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]