Джонсон Харт - Системное программирование в среде Windows

Здесь есть возможность читать онлайн «Джонсон Харт - Системное программирование в среде Windows» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва • Санкт-Петербург • Киев, Год выпуска: 2005, ISBN: 2005, Издательство: Издательский дом Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Системное программирование в среде Windows: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Системное программирование в среде Windows»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Эта книга посвящена вопросам разработки приложений с использованием интерфейса прикладного программирования операционных систем компании Microsoft (Windows 9х, Windows XP, Windows 2000 и Windows Server 2003). Основное внимание уделяется базовым системным службам, включая управление файловой системой, процессами и потоками, взаимодействие между процессами, сетевое программирование и синхронизацию. Рассматривается методика переноса приложений, написанных в среде Win32, в среду Win64. Подробно описываются все аспекты системы безопасности Windows и ее практического применения. Изобилие реальных примеров, доступных также и на Web-сайте книги, существенно упрощает усвоение материала.
Книга ориентирована на разработчиков и программистов, как высокой квалификации, так и начинающих, а также будет полезна для студентов соответствующих специальностей.

Системное программирование в среде Windows — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Системное программирование в среде Windows», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Программа 5.5, которая должна применяться совместно с программой 5.6, решает эту проблему, которая проявляется всякий раз, когда отображаются структуры данных, использующие указатели. В предлагаемом решении используется ключевое слово _based, предоставляемое Microsoft С. Альтернативным вариантом было бы отображение файла в массив и обеспечение доступа к записям в представлении объекта отображения файла с помощью индекса.

Программа написана в виде еще одной версии команды sort, которой в данном случае присвоено имя sortMM. Данная версия программы отличается следующими особенностями, заслуживающими внимания:

• Записи могут иметь переменную длину.

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

• Строятся два представления файла. Одно из них представляет исходный файл, а второе — файл, содержащий отсортированные ключи. Второй файл является индексным файлом (index file), каждая из записей которого содержит ключ и указатель (базовый адрес), относящийся к исходному файлу. Для сортировки индексного файла, во многом по аналогии с программой 5.4, применяется функция qsort.

• Индексный файл сохраняется и впоследствии может быть использован, причем предусмотрена возможность (параметр командной строки –I) отказаться от сортировки и использовать существующий индексный файл. Кроме того, индексный файл может быть использован для быстрого поиска ключей путем проведения бинарного поиска (возможно, с использованием входящей в библиотеку C функции bsearch) в индексном файле.

Взаимосвязь между индексным файлом и сортируемым файлом иллюстрирует рис. 5.5. Главной программой является программа 5.5, которая обеспечивает создание представлений файлов в памяти компьютера, осуществляет сортировку индексного файла и отображает результаты. Эта программа вызывает функцию CreateIndexFile, представленную программой 5.6.

Рис. 5.5.Сортировка с использованием отображения индексного файла

Программа 5.5. sortMM: использование базовых указателей в индексном файле

/* Глава 5. Команда sortMM.

Сортировка отображенного в памяти файла – только один файл. Опции:

-r Сортировать в обратном порядке.

-I Использовать индексный файл для получения отсортированного файла. */

#include "EvryThng.h"

int KeyCompare(LPCTSTR , LPCTSTR);

DWORD CreateIndexFile (DWORD, LPCTSTR, LPTSTR);

DWORD KStart, KSize; /* Начальная позиция и размер ключа (TCHAR) . */

BOOL Revrs;

int _tmain(int argc, LPTSTR argv []) {

HANDLE hInFile, hInMap; /* Дескрипторы входного файла. */

HANDLE hXFile, hXMap; /* Дескрипторы индексного файла. */

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

BOOL IdxExists;

DWORD FsIn, FsX, RSize, iKey, nWrite, *pSizes;

LPTSTR pInFile = NULL;

LPBYTE pXFile = NULL, pX;

TCHAR _based(pInFile) *pIn;

TCHAR IdxFlNam [MAX_PATH], ChNewLine = TNEWLINE;

int FlIdx = Options(argc, argv, _T("rI"), &Revrs, &IdxExists, NULL);

/* Шаг 1: открыть и отобразить входной файл. */

hInFile = CreateFile(argv [FlIdx], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

hInMap = CreateFileMapping(hInFile, NULL, PAGE_READWRITE, 0, 0, NULL);

pInFile = MapViewOfFile(hInMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

FsIn = GetFileSize(hInFile, NULL);

/* Шаги 2 и З: создать имя индексного файла. */

_stprintf(IdxFlNam, _T("%s%s"), argv[FlIdx], _T(".idx"));

if (!IdxExists) RSize = CreateIndexFile(FsIn, IdxFlNam, pInFile);

/* Шаг 4: отобразить индексный файл. */

hXFile = CreateFile(IdxFlNam, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

hXMap = CreateFileMapping(hXFile, NULL, PAGE_READWRITE, 0, 0, NULL);

pXFile = MapViewOfFile(hXMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

FsX = GetFileSize(hXFile, NULL);

pSizes = (LPDWORD)pXFile; /* Поля размера в .idx-файле. */

KSize = *pSizes; /* Размер ключа */

KStart = *(pSizes + 1); /* Начальная позиция ключа в записи. */

FsX –= 2 * sizeof(DWORD);

/* Шаг 5: сортировать индексный файл при помощи qsort. */

if (!IdxExists) qsort(pXFile + 2 * sizeof(DWORD), FsX / RSize, RSize, KeyCompare);

/* Шаг 6: отобразить входной файл в отсортированном виде. */

рХ = pXFile + 2 * sizeof(DWORD) + RSize – sizeof(LPTSTR);

for (iKey = 0; iKey < FsX / RSize; iKey++) {

WriteFile(hStdOut, &ChNewLine, TSIZE, &nWrite, NULL);

/* Приведение типа рХ, если это необходимо! */

pIn = (TCHAR _based (pInFile)*) *(LPDWORD)pX;

while ((*pIn != CR || * (pIn + 1) != LF) && (DWORD) pIn < FsIn) {

WriteFile(hStdOut, pIn, TSIZE, &nWrite, NULL); pIn++;

}

рХ += RSize;

}

UnmapViewOfFile(pInFile);

CloseHandle(hInMap);

CloseHandle(hInFile);

UnmapViewOfFile(pXFile);

CloseHandle(hXMap);

CloseHandle(hXFile);

return 0;

}

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Системное программирование в среде Windows»

Представляем Вашему вниманию похожие книги на «Системное программирование в среде Windows» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Системное программирование в среде Windows»

Обсуждение, отзывы о книге «Системное программирование в среде Windows» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x