Системно програмиране на Hart в Windows среда. Системно програмиране на Windows: Джонсън Харт

Системно програмиране на Hart в Windows среда. Системно програмиране на Windows: Джонсън Харт

Тази книга е посветена на разработването на приложения, използващи интерфейса за програмиране на приложения на операционните системи на Microsoft (Windows 9x, Windows XP, Windows 2000 и Windows сървър 2003). Фокусът е върху основните системни услуги, включително управление на файлова система, управление на процеси и нишки, комуникация между процесите, мрежово програмиране и синхронизация. Разгледана е техниката за пренасяне на приложения, написани в среда Win32, към среда Win64. Подробно са описани всички аспекти на системата за сигурност на Windows и нейното практическо приложение. Изобилието от примери от реалния живот, достъпни и на уебсайта на книгата, прави материала много по-лесен за смилане.

Книгата е насочена към разработчици и програмисти, както висококвалифицирани, така и начинаещи, и ще бъде полезна и за студенти от съответните специалности.

Въведение

Тази книга описва как да се разработват приложения с помощта на интерфейса за програмиране на приложения (API) на операционните системи Windows на Microsoft, като се фокусира върху основните системни услуги, включително управление на файлова система, управление на процеси и нишки, междупроцесна комуникация, мрежово програмиране и синхронизация. Потребителските интерфейси, вътрешността на Windows и I/O драйверите не са разгледани в тази книга, въпреки че тези теми са еднакво важни и интересни сами по себе си. За примери бяха избрани предимно реалистични сценарии и следователно много от тях могат да послужат като основа за изграждане на реални приложения.

Win32/Win64 API, или общо взето Windows API, се поддържат от семейството на Microsoft от 32-битови и 64-битови операционни системи, което в момента включва Windows XP, Windows 2000 и Windows Server 2003. Windows системи NT, Windows Me, Windows 98 и Windows 95; тези системи вече се считат за остарели, но много от примерните програми в тази книга могат да работят под тях. Проблемите с миграцията от платформата Win32 към развиващата се платформа Win64 се обсъждат при необходимост. Поддържан като 64-битов интерфейс в някои версии на Windows Server 2003 и Windows XP, Win64 е почти идентичен с Win32.

Няма съмнение, че Windows API е най-важният фактор, който влияе върху целия процес на разработка на приложения и в много случаи замества POSIX API, поддържан от UNIX и Linux операционни системи, тъй като се счита за по-предпочитан или поне предоставя същите възможности за приложения. , фокусирани върху настолни и сървърни системи. Поради това много опитни програмисти се интересуват да научат Windows API възможно най-скоро и тази книга е предназначена да насърчи това.

На първо място е необходимо да ви разкажем какво представлява Windows API и да ви покажем как да го използвате в реални ситуации, като тази история трябва да бъде възможно най-кратка и да не е претоварена с ненужни подробности. Следователно тази книга не е предназначена да се използва като справочно ръководство, а да се запознаят с основните свойства на най-важните функции и да демонстрират възможностите за тяхното приложение в практически ситуации на програмиране. Въоръжен с тези знания, читателят ще може да се възползва от обширната помощна документация, предоставена от Microsoft за задълбочено самообучение. индивидуални въпроси, разширени функции и по-малки функции, според вашите нужди или интерес. Лично за мен с този подход научаването на Windows API беше лесно и разработването на Windows програми беше голямо удоволствие, въпреки че имаше и някои неприятни моменти. Импулсите ми на ентусиазъм се забелязват лесно на някои места в книгата, което всъщност не е изненадващо. Това обаче изобщо не означава, че съм безусловно съгласен с превъзходството на API на Windows над API на други операционни системи (ОС), но едва ли някой ще възрази срещу факта, че има много положителни качества.

Авторите на много книги за Windows отделят значително внимание на обяснението какво представляват процесите, виртуална памет, междупроцесна комуникация, която изпреварва планировчика, но не показва как всичко това се използва в реални ситуации. Програмистите с опит с UNIX, Linux, IBM MVS, Open VMS и някои други операционни системи вече са запознати с тези концепции и се интересуват само от това да научат как тези функции се прилагат в Windows възможно най-бързо. В допълнение, повечето книги за Windows имат силен фокус върху техниките за програмиране на потребителския интерфейс. За да се съсредоточим само върху най-важните основни функции, предоставени от системата, тази книга не засяга потребителския интерфейс и ние ограничаваме нашата дискусия до обикновен I/O символ на конзолата.

Според гледната точка на тази книга Windows е просто API. операционна система, който предоставя набор от добре разбрани инструменти. Много програмисти, независимо от тяхното ниво на опит, изпитват нужда от ускорено изучаване на Windows и без познания за Windows е немислимо да се обсъждат теми като Component Object Model (COM), разработен от Microsoft. В някои отношения Windows системите превъзхождат други системи, в други изостават или са приблизително на същото ниво. Целта на тази книга е да демонстрира как най-добре да използвате тези възможности в ситуации от реалния свят, за да разработите полезни, висококачествени приложения с висока производителност.

Потенциална публика

Всеки, който иска бързо да се научи как да разработва приложения, независимо от нивото на опит.

Програмисти и разработчици софтуер, които са изправени пред задачата да пренесат съществуващи приложения, написани по-специално за UNIX, към някоя от платформите на Windows. Книгата демонстрира сравнителните възможности на функциите и програмните модели, свързани с използвайки Windows, UNIX и стандартната библиотека C. Всяка от общите функционалност UNIX, включително управление на процеси, синхронизация, файлови системии междупроцесна комуникация, се разглежда от гледна точка на Windows.

Читателите започват да разработват нови проекти, които не са ограничени в действията си от необходимостта да пренасят съществуващи програмни кодове към други платформи. Книгата обхваща много аспекти на проектирането и изпълнението на програмата и демонстрира как да се използва Функции на Windowsза създаване полезни приложенияи решаване на общи проблеми с програмирането.

COM и .NET Framework програмисти, които ще намерят много полезна информация, улесняване на изучаването на принципите на библиотеките с динамични връзки (динамически свързващи библиотеки, DLL), модели на нишки и как да се използват, интерфейси и синхронизация.

Студенти, изучаващи компютърни науки в последните си години на университети или участващи в обучение тезисисвързани със системно програмиране или разработка на приложения. Книгата ще бъде полезна и за тези, които изучават многопоточно програмиране или са изправени пред необходимостта да творят мрежови приложения. Може да се използва и като полезно допълнениекъм източници като книгата на У. Ричард Стивънс (W. Richard Stevens) Разширено програмиране в UNIX среда(вижте библиографията), за да позволите на учениците да сравняват Функции на Windowsи UNIX. Тази книга също ще бъде от голяма полза за студентите, които посещават курс по ОС, тъй като показва как точно се предоставя основната функционалност на ОС от търговски интерес.

Единственото предположение, което се подразбира във всичко по-горе, е предположението, че читателите имат опит в програмирането на езика C.

Промени в третото издание

Наред със значителна актуализация и реорганизация от първите две издания, третото издание добавя значително количество нов материал. Тази публикация има за цел да реши следните задачи:

Покрийте новите функции, въведени в Windows XP, Windows 2000 и Windows Server 2003, и помислете за преминаване към платформата Win64.

Отхвърляне на материала, специфичен за Windows 95, Windows 98 и Windows ME (семейство „Windows 9x“) като остарял, тъй като в момента се доставя лични системи Windows XP се инсталира и ограниченията, присъщи на Windows 9x, вече са загубили своята релевантност. Примерните програми използват, без резерви, инструменти, които са включени само в текущата Windows версии, въпреки че това ще попречи на някои програми да работят под Windows 9x.

Осигурете по-изчерпателно покритие на темата за нишки и синхронизация, включително проблеми, свързани с производителността, скалируемостта и надеждността. Глава 9, както и някои от примерите в глава 10, са нови.

Подчертайте нарастващото влияние на Windows 2000 и Windows Server 2003 и новите инструменти, които те включват върху възможностите на високопроизводителни, мащабируеми, многонишкови сървърни приложения.

Изследвайте зависимостта на производителността на програмите от принципите на тяхното изграждане, като обърнете специално внимание на многонишковите програми със синхронизация и на характеристиките на работата на тези програми в условия на симетрични многопроцесорни (Symmetrical Multiprocessor, SMP) системи.

Вземете под внимание коментарите на читателите и студентите относно коригирането на недостатъците и подобряването на стила на представяне, както и всичките им съвети и предложения, както важни, така и най-незначителните.

Как е организирана тази книга

Главите са подредени според тематичния им фокус и затова първо се разглеждат инструментите, необходими за изпълнение на изключително еднонишкови приложения, след това инструментите, използвани за управление на процеси и нишки, и едва след това се обсъжда мрежовото програмиране в многонишкова среда. Тази организация на книгата улеснява читателя да следва логиката на презентацията, последователно преминавайки от файлови системи към управление на паметта и картографиране на файлове, след това към процеси, нишки и синхронизация и след това към междупроцесна и мрежова комуникация и приложение проблеми със сигурността. Тази организация също така позволява примерите да се надграждат естествено, когато стават по-сложни, подобно на разработчика, когато първо създава прост прототип и след това постепенно въвежда допълнителни функции. Разглеждането на разширени въпроси, като асинхронен вход/изход и проблеми със сигурността, е преместено в самия край на книгата.

В рамките на всяка глава, след кратко обсъждане на отделните функции, като контрол на процеса или показване на файлове, най-важните от съответните функции на Windows и тяхната връзка една с друга се обсъждат подробно. Презентацията е придружена с илюстративни примери. В основния текст са включени само най-важните части от списъците с програми; пълните текстове на програмите, както и необходимите включващи файлове, спомагателни функции и друг код са дадени в Приложение A или са достъпни на уеб сайта на книгата (http://www.awprofessional.com/titles/0321256190) . Където функциите се поддържат само от текущи версии на Windows (XP, 2000 и Server 2003) и не се поддържат от по-ранни версии, като Windows 9x и Windows NT, които не включват много от подобрените функции, се прилагат отделни откази от отговорност. Всяка глава предоставя списък с допълнителна препоръчителна литература и предлага няколко упражнения. Много упражнения се фокусират върху въпроси, които са важни и представляват известен интерес, но не са били обхванати в основния текст, докато други упражнения карат читателя да се задълбочи в теми от по-сложен или специализиран характер.

Глава 1 предоставя въведение на високо ниво в семейството операционни системи Windows и API на Windows. Използва се като пример проста програмаДемонстрира основните елементи на стила на програмиране на Windows и осигурява основа за прилагане на разширени функции на Windows. Win64 и проблемите с миграцията на междуплатформен софтуер се обсъждат първо в глава 1, изследват се по-подробно в глава 16 и се обсъждат, ако е необходимо, в останалата част от книгата.

Глави 2 и 3 обхващат файлови системи, I/O на конзолата, заключване на файлове и управление на директории. Глава 2 също така говори за Unicode, разширения набор от символи, използван от Windows. Съответните илюстративни примери обхващат последователен и директен достъп до данни, съдържащи се във файл, обхождане на дърво на директории и архивиране на файлове. Глава 3 завършва с обсъждане на програмното управление на регистъра, което има много общо с управлението на файлове и директории.

Глава 4 запознава читателя с обработката на изключения в Windows, включително обработката на структурирани изключения (SEH), която ще се използва широко в цялата книга. В много книги изучаването на SEH се отлага до последните глави, но след като се запознахме с този инструмент още в началния етап, ще можем да го използваме веднага, което значително ще опрости някои програмни задачи за нас и ще подобри качество на нашите програми. Освен това тук е описана и една от най-новите функции, обработка на векторни изключения.

Глава 5 разглежда управлението на паметта в Windows и показва как картографирането на файлове се използва не само за опростяване на програмирането, но и за подобряване на производителността на програмата. Тази глава също така обсъжда организацията на DLL.

Глава 6 предоставя въведение в процесите, управлението на процеси и прости техники за синхронизиране в Windows. По-късно в глава 7 тези понятия се използват за описание на контрола на потока. Примерите във всяка глава илюстрират многото предимства, включително опростяване на програмата и подобрения на производителността, които идват от използването на нишки и процеси.

Глави 8, 9 и 10 предлагат задълбочен анализ на един от най-мощните Windows инструменти- синхронизиране на нишки. Синхронизирането е сложна тема и като такава тези глави съдържат множество примери и описания, които са доста разбираеми модели, което трябва да помогне на читателя да се възползва напълно от нишките, за да подобри ефективността на програмирането и производителността на програмата, като същевременно избягва много клопки. Тези глави включват нов материал, обхващащи проблемите на производителността и скалируемостта, които са от особено значение при създаването на сървърни приложения, включително тези, които трябва да работят на SMP системи.

Глави 11 и 12 са посветени на комуникацията между процесите и нишките, както и на мрежовото програмиране. Глава 11 се фокусира върху функциите, които са част от Windows, а именно анонимни канали, именувани канали и пощенски кутии. Глава 12 обсъжда Windows Sockets (Windows Sockets), които предоставят възможност за комуникация със системи извън Windows. Семейство Windows, чрез стандартни протоколи, главно TCP/IP. И въпреки че Windows интерфейсСокетите, строго погледнато, не са част от Windows API, те могат да комуникират и взаимодействат през мрежи и Интернет, така че предметът на тази глава е в съответствие с останалата част от книгата. Използвайки примера на многонишкова система клиент-сървър, е илюстрирано как комуникацията между процесите може да бъде осигурена заедно с нишките.

Глава 13 показва как начин Windowsви позволява да превърнете сървърни приложения като тези, създадени в глави 11 и 12 в windows услуги(Windows Services), които могат да се управляват като back-end сървъри. Преобразуването на сървър в услуга изисква само незначителни промени в програмата.

Глава 14 показва как да изпълнявате асинхронни I/O операции, използвайки припокриващи се I/O, както и събития и рутинни процедури. Същите резултати могат да бъдат постигнати с нишки, така че са предоставени примери за сравняване на различни решения по отношение на простотата и производителността на съответните програми. В същото време изграждането на мащабируеми многонишкови сървъри изисква използването на портове за завършване, чието използване е илюстрирано от примера на сървъри, създадени в предишните глави. Описани са и таймери за изчакване, чието обсъждане изисква използването на концепции, въведени по-рано в тази глава.

Глава 15 се фокусира върху защитата на обекти на Windows, използвайки като пример емулация на система за защита на файлове в стил UNIX, която изисква подходящи разрешения за извършване на определени операции върху файл. Допълнителни примери илюстрират как са защитени процесите, нишките и наименуваните канали. След това могат да бъдат добавени добавки за сигурност към обсъдените по-рано примери.

Глава 16 завършва основния материал с обсъждане на програмирането в Win64 и софтуерна съвместимостс тази платформа. След това един от примерите, разгледани по-рано, се преобразува във форма, която позволява програмата да бъде пренесена към платформата Win64.

Основният материал на книгата е допълнен от три приложения. Приложение A съдържа описания на програмите, налични на уеб сайта на книгата, и препоръки за тяхното използване. Приложение B съдържа няколко таблици, които сравняват функции на Windows с еквивалентни функции, предоставени от UNIX и стандартната библиотека C. Приложение C сравнява производителността на алтернативни реализации на някои от примерите в основния текст, позволявайки на читателя да формира своя собствена представа за относителните предимства и недостатъците на инструментите на Windows, както основни, така и разширени, и инструментите, предоставени от C библиотеката.

Сравнение с UNIX и C библиотеката

В хода на представянето на материала сравняваме стила и функционалността на инструментите на Windows и подобни инструменти, включени в UNIX (Linux) и стандартната библиотека ANSI C. Както вече беше отбелязано, Приложение B съдържа таблици, съдържащи пълен списък на сравними функции. Решихме, че ще бъде полезно да включим тази информация, тъй като много читатели са запознати с UNIX и резултатите от сравняването на двете системи една с друга несъмнено ще представляват интерес за тях. Тези, които не са запознати със системата UNIX, могат спокойно да пропуснат съответните раздели, които са с дребен шрифт и с отстъп, за да ги различим по-лесно.

Примерите трябва да предоставят примери за често срещано, най-често срещано и практическо използване на функциите на Windows.

Те трябва да отговарят на реални ситуации от областта на програмирането, с които човек трябва да се сблъска в процеса на разработка на софтуер, консултиране и обучение. Някои от моите клиенти и слушатели са използвали примерните кодове, когато са изграждали свои собствени системи. При моите консултации често попадам на програмни кодове, подобни на тези, включени в тази книга, а на няколко пъти дори са се обръщали към мен с кодове, взети директно от първото или второто издание. (Между другото, можете също да използвате примерите от книгата в работата си и ако включите и благодарение на мен в документацията, тогава ще се радвам.) Често срещах тези кодове като отделни части на COM или C ++ обекти. Примерите, като се вземат предвид ограниченията за времето за тяхната подготовка и допустимото количество код, са близки до "реалния живот" и решават "реални" проблеми.

Примерите трябва да подчертават действителното поведение и взаимодействие на функциите, които не винаги са това, което човек би очаквал след прочитане на документацията. В тази книга както текстът, така и примерите се фокусират не върху самите функции, а върху това как те взаимодействат една с друга.

Примерният код трябва да се създава постепенно и да се разширява, за да се добави нова функционалност към предишно решение по прост и разбираем начин и да се демонстрират алтернативни техники за внедряване.

Много от примерите в първите няколко глави прилагат UNIX команди като ls, touch, chmod и sort, като по този начин представят функциите на Windows в познат контекст на някои читатели, като същевременно предоставят полезен набор от помощни функции. Освен това присъствието различни вариантиПрилагането на същата команда улеснява оценката на ползите от производителността от използването на подобрения на Windows. Съответните резултати от изпитването са дадени в приложение Б.

Примерите, дадени в началото на книгата, като правило се различават по кратката дължина на програмите, но тъй като материалът става по-сложен в следващите глави, размерът на илюстративния програмен код, ако е необходимо, се увеличава значително.

Упражненията в края на всяка глава приканват читателя да разработи алтернативни решения, да проучи сам препоръчаните теми или да се запознае с допълнителни функции, които, макар и интересни, не могат да бъдат разгледани подробно в тази книга. Някои от упражненията са доста лесни, докато други може да са трудни за вас. Често ще ви бъдат представени и очевидно неуспешни решения, тъй като идентифицирането и отстраняването на грешки ще ви предостави отлични възможности да усъвършенствате уменията си.

Всички примери са отстранени грешки и са тествани под операционни системи Windows XP, Windows 2000 и Windows Server 2003. – Когато е необходимо, тестването е извършено под операционни системи Windows 9x и Windows NT. И въпреки че базираните на еднопроцесорни системи Процесори на Intel, повечето от програмите бяха тествани и на многопроцесорни системи. При тестване на приложения с клиент-сървър архитектураняколко клиента, взаимодействащи със сървъра, са използвани едновременно. Никога обаче не може да се каже, че програмите са правилни или пълни и подходящи за всякакви цели. Несъмнено дори най-простите примери могат да имат недостатъци и при определени обстоятелства изобщо да не работят - такава е съдбата на почти всеки софтуер. Затова авторът ще бъде искрено благодарен на всички, които изпращат доклади за евентуални дефекти, открити в програмите, и още по-добре - за грешки.

Уебсайтове за тази книга

Уеб сайтът на книгата (http://www.awprofessional.com/titles/0321256190) съдържа изтегляне, съдържащо целия код и проекти за всички примери в книгата, решения на някои от упражненията, алтернативни реализации на някои от примерите , инструкции, както и резултатите от оценките на ефективността на тестовете. Тази информация се актуализира периодично, ако е необходимо, за да се включат нови материали и да се направят необходимите корекции.

На моя личен уебсайт (http://www.world.std.com/~jmhart/windows.htm) ще намерите списък с грешки, открити в книгата, както и допълнителни примери, писма от читатели и допълнителни обяснения , сред много други.. Включени са и слайдове на PowerPoint, които могат да се използват за некомерсиални образователни цели. Тези слайдове вече са използвани от студенти в много професионални курсове, но са подходящи и за използване в колежи.

Тъй като се установят недостатъци и грешки и се получи обратна връзка от читателите, този материал ще се актуализира периодично. Ако срещнете затруднения с програмите или други материали, съдържащи се в книгата, моля, първо посетете посочените сайтове, където може да намерите необходимите обяснения или да получите информация за откритите до момента грешки. Ако подобен опит за получаване на отговор на въпроса ви е неуспешен, моля свържете се директно с мен на следния адрес. електронна поща: [имейл защитен].

Благодаря

По време на подготовката на третото издание много хора ми оказаха ефективна помощ, дадоха съвети или просто ме подкрепиха блага дума, а читателите предложиха редица ценни идеи и коментари. Уеб сайтът на автора изразява гореща благодарност към всички онези, чиито съвети и коментари попаднаха в третото издание на книгата, докато първите две издания съдържат благодарности към онези, които ни дадоха ценни съвети по-рано. В допълнение, скорошни рецензии от Вагиф Абилов, Бил Дрейпър, Хорст Д. Клаузен, Майкъл Дейвидсън, Даниел Джианг), Ерик Ландес, Клаус Х. Пробст и Дъглас Райли, които приеха работата много по-сериозно, отколкото само формалните задължения биха изисквали; техните съвети и препоръки заслужават най-дълбока благодарност и мога само да се надявам, че съм се отнесъл с не по-малко внимание към резултатите от тяхната работа. Специални благодарности отивам на моите приятели от ArrAy Inc.; Научих много от тях.

Ан Х. Смит, която направи набора, вложи цялото си умение, постоянство и търпение в подготовката на книгата за публикуване; Без нейния принос тази книга нямаше да бъде издадена. Elissa Armor, която подготви оформленията за първите две издания, постави основите за настоящото издание, като направи прехода възможно най-плавен.

Криста Медоубрук, редактор на ръкописа, значително подобри точността, яснотата и съгласуваността на представянето. Внимателното й отношение към съдържанието на книгата, острите въпроси и проницателността помогнаха да се задълбочи по редица въпроси.

Персоналът на Addison-Wesley Professional показа такъв професионализъм и знания, че беше удоволствие да се работи с тях. Стефани Накиб, редактор, и Карън Гетман, главен редактор, работиха по проекта от самото начало, пришпориха ме, когато беше необходимо, изчистиха всякакви бъркотии и се увериха, че не се отклонявам и на йота от работния график. Ебони Хейт, асоцииран редактор, наблюдаваше целия процес, докато продуцентският екип на Джон Фулър и Патрик Кеш-Питерсън, координатор на продукцията, бяха накарани да вярват, че производственият процес не може да бъде свързан без затруднения.

Тази книга е посветена на нашите любими Боб и Елизабет.

Джонсън (Джон) М. Харт (Джонсън (Джон) М. Харт) [имейл защитен]август 2004 г

От издателството

Вие, читателят на тази книга, сте нейният основен критик и коментатор. Ние ценим вашето мнение и искаме да знаем какво направихме правилно, какво можеше да бъде направено по-добре и какво друго бихте искали да видите публикувано от нас. Интересуваме се да чуем други коментари, които бихте искали да изразите пред нас.

Очакваме вашите коментари и ги очакваме с нетърпение. Можете да ни изпратите хартия или електронна поща, или просто посетете нашия уеб сървър и оставете вашите коментари там. С една дума, по всеки удобен за вас начин ни уведомете дали харесвате тази книга или не, а също така изразете мнението си как да направим нашите книги по-интересни за вас.

Когато изпращате писмо или съобщение, не забравяйте да посочите заглавието на книгата и нейните автори, както и обратния адрес. Ние внимателно ще прочетем вашето мнение и непременно ще го вземем предвид при избора и подготовката за издаване на следващите книги.

Нашите координати:

Електронна поща: [имейл защитен]

WWW: http://www.williamspublishing.com

Информация за писма от: Русия: 115419, Москва, п.к.783 Украйна: 03150, Киев, п.к.152


Джонсън М. Харт Системно програмиране V Windows средаТрето издание

Въведение

Тази книга описва как да се разработват приложения с помощта на интерфейса за програмиране на приложения (API) на операционните системи Windows на Microsoft, като се фокусира върху основните системни услуги, включително управление на файлова система, управление на процеси и нишки, междупроцесна комуникация, мрежово програмиране и синхронизация. Потребителските интерфейси, вътрешността на Windows и I/O драйверите не са разгледани в тази книга, въпреки че тези теми са еднакво важни и интересни сами по себе си. За примери бяха избрани предимно реалистични сценарии и следователно много от тях могат да послужат като основа за изграждане на реални приложения.

Win32/Win64 API, или общо взето Windows API, се поддържат от семейството на Microsoft от 32-битови и 64-битови операционни системи, което в момента включва Windows XP, Windows 2000 и Windows Server 2003. Ранните членове на това семейство включват операционни системи Windows NT ., Windows Me, Windows 98 и Windows 95; тези системи вече се считат за остарели, но много от примерните програми в тази книга могат да работят под тях. Проблемите с миграцията от платформата Win32 към развиващата се платформа Win64 се обсъждат при необходимост. Поддържан като 64-битов интерфейс в някои версии на Windows Server 2003 и Windows XP, Win64 е почти идентичен с Win32.

Няма съмнение, че Windows API е най-важният фактор, който влияе върху целия процес на разработка на приложения и в много случаи замества POSIX API, поддържан от UNIX и Linux операционни системи, тъй като се счита за по-предпочитан или поне предоставя същите възможности за приложения. , фокусирани върху настолни и сървърни системи. Поради това много опитни програмисти се интересуват да научат Windows API възможно най-скоро и тази книга е предназначена да насърчи това.

На първо място е необходимо да ви разкажем какво представлява Windows API и да ви покажем как да го използвате в реални ситуации, като тази история трябва да бъде възможно най-кратка и да не е претоварена с ненужни подробности. Следователно тази книга не е предназначена да се използва като справочно ръководство, а да ви запознае с основните свойства на най-важните функции и да демонстрира как те могат да бъдат използвани в практически ситуации на програмиране. Въоръжен с тези знания, читателят ще може да се възползва от обширната помощна документация, предоставена от Microsoft за самостоятелно насочващо се задълбочено изследване на специфични теми, разширени функции и по-малко известни функции, според техните нужди или интереси. Лично за мен с този подход научаването на Windows API беше лесно и разработването на Windows програми беше голямо удоволствие, въпреки че имаше и някои неприятни моменти. Импулсите ми на ентусиазъм се забелязват лесно на някои места в книгата, което всъщност не е изненадващо. Това обаче изобщо не означава, че съм безусловно съгласен с превъзходството на API на Windows над API на други операционни системи (ОС), но едва ли някой ще възрази срещу факта, че има много положителни качества.

Авторите на много книги за Windows отделят много време, обяснявайки какво представляват процесите, виртуалната памет, комуникацията между процесите, превантивният планировчик, но не показват как всичко това се използва в реални ситуации. Програмистите с опит с UNIX, Linux, IBM MVS, Open VMS и някои други операционни системи вече са запознати с тези концепции и се интересуват само от това да научат как тези функции се прилагат в Windows възможно най-бързо. В допълнение, повечето книги за Windows имат силен фокус върху техниките за програмиране на потребителския интерфейс. За да се съсредоточим само върху най-важните основни функции, предоставени от системата, тази книга не засяга потребителския интерфейс и ние ограничаваме нашата дискусия до обикновен I/O символ на конзолата.

Според гледната точка на тази книга, Windows е просто API на операционната система, който предоставя набор от добре разбрани средства. Много програмисти, независимо от тяхното ниво на опит, изпитват нужда от ускорено изучаване на Windows и без познания за Windows е немислимо да се обсъждат теми като Component Object Model (COM), разработен от Microsoft. В някои отношения Windows системите превъзхождат други системи, в други изостават или са приблизително на същото ниво. Целта на тази книга е да демонстрира как най-добре да използвате тези възможности в ситуации от реалния свят, за да разработите полезни, висококачествени приложения с висока производителност.

Джонсън М. Харт

Системно програмиране в Windows среда

Трето издание

Въведение

Тази книга описва как да се разработват приложения с помощта на интерфейса за програмиране на приложения (API) на операционните системи Windows на Microsoft, като се фокусира върху основните системни услуги, включително управление на файлова система, управление на процеси и нишки, междупроцесна комуникация, мрежово програмиране и синхронизация. Потребителските интерфейси, вътрешността на Windows и I/O драйверите не са разгледани в тази книга, въпреки че тези теми са еднакво важни и интересни сами по себе си. За примери бяха избрани предимно реалистични сценарии и следователно много от тях могат да послужат като основа за изграждане на реални приложения.

Win32/Win64 API, или общо взето Windows API, се поддържат от семейството на Microsoft от 32-битови и 64-битови операционни системи, което в момента включва Windows XP, Windows 2000 и Windows Server 2003. Ранните членове на това семейство включват операционни системи Windows NT ., Windows Me, Windows 98 и Windows 95; тези системи вече се считат за остарели, но много от примерните програми в тази книга могат да работят под тях. Проблемите с миграцията от платформата Win32 към развиващата се платформа Win64 се обсъждат при необходимост. Поддържан като 64-битов интерфейс в някои версии на Windows Server 2003 и Windows XP, Win64 е почти идентичен с Win32.

Няма съмнение, че Windows API е най-важният фактор, който влияе върху целия процес на разработка на приложения и в много случаи замества POSIX API, поддържан от UNIX и Linux операционни системи, тъй като се счита за по-предпочитан или поне предоставя същите възможности за приложения. , фокусирани върху настолни и сървърни системи. Поради това много опитни програмисти се интересуват да научат Windows API възможно най-скоро и тази книга е предназначена да насърчи това.

На първо място е необходимо да ви разкажем какво представлява Windows API и да ви покажем как да го използвате в реални ситуации, като тази история трябва да бъде възможно най-кратка и да не е претоварена с ненужни подробности. Следователно тази книга не е предназначена да се използва като справочно ръководство, а да ви запознае с основните свойства на най-важните функции и да демонстрира как те могат да бъдат използвани в практически ситуации на програмиране. Въоръжен с тези знания, читателят ще може да се възползва от обширната помощна документация, предоставена от Microsoft за самостоятелно насочващо се задълбочено изследване на специфични теми, разширени функции и по-малко известни функции, според техните нужди или интереси. Лично за мен с този подход научаването на Windows API беше лесно и разработването на Windows програми беше голямо удоволствие, въпреки че имаше и някои неприятни моменти. Импулсите ми на ентусиазъм се забелязват лесно на някои места в книгата, което всъщност не е изненадващо. Това обаче изобщо не означава, че съм безусловно съгласен с превъзходството на API на Windows над API на други операционни системи (ОС), но едва ли някой ще възрази срещу факта, че има много положителни качества.

Авторите на много книги за Windows отделят много време, обяснявайки какво представляват процесите, виртуалната памет, комуникацията между процесите, превантивният планировчик, но не показват как всичко това се използва в реални ситуации. Програмистите с опит с UNIX, Linux, IBM MVS, Open VMS и някои други операционни системи вече са запознати с тези концепции и се интересуват само от това да научат как тези функции се прилагат в Windows възможно най-бързо. В допълнение, повечето книги за Windows имат силен фокус върху техниките за програмиране на потребителския интерфейс. За да се съсредоточим само върху най-важните основни функции, предоставени от системата, тази книга не засяга потребителския интерфейс и ние ограничаваме нашата дискусия до обикновен I/O символ на конзолата.

Според гледната точка на тази книга, Windows е просто API на операционната система, който предоставя набор от добре разбрани средства. Много програмисти, независимо от тяхното ниво на опит, изпитват нужда от ускорено изучаване на Windows и без познания за Windows е немислимо да се обсъждат теми като Component Object Model (COM), разработен от Microsoft. В някои отношения Windows системите превъзхождат други системи, в други изостават или са приблизително на същото ниво. Целта на тази книга е да демонстрира как най-добре да използвате тези възможности в ситуации от реалния свят, за да разработите полезни, висококачествени приложения с висока производителност.

Потенциална публика

Всеки, който иска бързо да се научи как да разработва приложения, независимо от нивото на опит.

Програмисти и разработчици на софтуер, които са изправени пред задачата да пренесат съществуващи приложения, написани специално за UNIX, към която и да е от платформите на Windows. Книгата демонстрира относителните възможности на функциите и моделите за програмиране, свързани с използването на Windows, UNIX и стандартната библиотека C. Всяка от общите характеристики на UNIX, включително управление на процеси, синхронизация, файлови системи и междупроцесна комуникация, се обсъжда в условията на Windows .

Читателите започват да разработват нови проекти, които не са ограничени в действията си от необходимостта да пренасят съществуващи програмни кодове към други платформи. Тази книга обхваща много аспекти на проектирането и внедряването на програмата и демонстрира как да използвате функциите на Windows за създаване на полезни приложения и решаване на често срещани проблеми с програмирането.

Програмистите на COM и .NET Framework ще намерят тук много полезна информация, която да им помогне да научат за библиотеките с динамични връзки (DLL), моделите на нишки и как да ги използват, интерфейсите и синхронизацията.

Студенти, които са завършили компютърни науки или които работят върху дипломни работи, свързани със системно програмиране или разработка на приложения. Книгата ще бъде полезна и за тези, които изучават многопоточно програмиране или са изправени пред необходимостта да създават мрежови приложения. Може да се използва и като полезно допълнение към източници като W. Richard Stevens Разширено програмиране в UNIX среда(вижте библиографията), което ще позволи на студентите да сравнят характеристиките на Windows и UNIX. Тази книга също ще бъде от голяма полза за студентите, които посещават курс по ОС, тъй като показва как точно се предоставя основната функционалност на ОС от търговски интерес.

Единственото предположение, което се подразбира във всичко по-горе, е предположението, че читателите имат опит в програмирането на езика C.

Промени в третото издание

Наред със значителна актуализация и реорганизация от първите две издания, третото издание добавя значително количество нов материал. Тази публикация има за цел да реши следните задачи:

Покрийте новите функции, въведени в Windows XP, Windows 2000 и Windows Server 2003, и помислете за преминаване към платформата Win64.

Оттегляне на Windows 95, Windows 98 и специфичен за Windows ME материал (фамилията "Windows 9x") като остарял, тъй като личните системи, които се доставят в момента, работят с Windows XP и ограниченията на Windows 9x вече не са приложими. В примерните програми, без уговорки, се използват инструменти, включени само в текущи версии Windows, въпреки че в резултат на това някои програми няма да работят на Windows 9x.

Осигурете по-изчерпателно покритие на темата за нишки и синхронизация, включително проблеми, свързани с производителността, скалируемостта и надеждността. Глава 9, както и някои от примерите в глава 10, са нови.

Подчертайте нарастващото влияние на Windows 2000 и Windows Server 2003 и новите инструменти, които те включват върху възможностите на високопроизводителни, мащабируеми, многонишкови сървърни приложения.

Изследвайте зависимостта на производителността на програмите от принципите на тяхното изграждане, като обърнете специално внимание на многонишковите програми със синхронизация и на характеристиките на работата на тези програми в условия на симетрични многопроцесорни (Symmetrical Multiprocessor, SMP) системи.