Hart systemprogrammering i Windows-miljö. Windows-systemprogrammering: Johnson Hart

Hart systemprogrammering i Windows-miljö. Windows-systemprogrammering: Johnson Hart

Den här boken ägnas åt utveckling av applikationer som använder applikationsprogrammeringsgränssnittet i Microsofts operativsystem (Windows 9x, Windows XP, Windows 2000 och Windows Server 2003). Fokus ligger på grundläggande systemtjänster, inklusive filsystemhantering, process- och trådhantering, kommunikation mellan processer, nätverksprogrammering och synkronisering. Tekniken att porta applikationer skrivna i Win32-miljön till Win64-miljön beaktas. Alla aspekter av Windows säkerhetssystem och dess praktiska tillämpning beskrivs i detalj. Överflödet av verkliga exempel, även tillgängliga på bokens webbplats, gör materialet mycket lättare att smälta.

Boken vänder sig till utvecklare och programmerare, både högt kvalificerade och nybörjare, och kommer även att vara användbar för studenter med relevanta specialiteter.

Introduktion

Den här boken beskriver hur man utvecklar applikationer med hjälp av Application Programming Interface (API) i Microsofts Windows-operativsystem, med fokus på grundläggande systemtjänster, inklusive filsystemhantering, process- och trådhantering, kommunikation mellan processer, nätverksprogrammering och synkronisering. Användargränssnitt, interna Windows och I/O-drivrutiner behandlas inte i den här boken, även om dessa ämnen är lika viktiga och intressanta i sig. Till exempel valdes huvudsakligen realistiska scenarier, och därför kan många av dem mycket väl fungera som grund för att bygga verkliga applikationer.

Win32/Win64 API:er, eller generiskt Windows API:er, stöds av Microsofts familj av 32-bitars och 64-bitars operativsystem, som för närvarande inkluderar Windows XP, Windows 2000 och Windows Server 2003. Tidiga medlemmar av denna familj inkluderar Windows NT-operativsystem , Windows Me, Windows 98 och Windows 95; dessa system anses nu vara föråldrade, men många av exempelprogrammen i den här boken kan köras under dem. Migreringsfrågor från Win32-plattformen till den utvecklande Win64-plattformen diskuteras vid behov. Stöds som ett 64-bitars gränssnitt i vissa versioner av Windows Server 2003 och Windows XP, Win64 är nästan identisk med Win32.

Det råder ingen tvekan om att Windows API är den viktigaste faktorn som påverkar hela och i många fall ersätter POSIX API som stöds av UNIX och Linux operativsystem, eftersom det anses vara mer att föredra eller åtminstone ger samma möjligheter för applikationer. , fokuserad på skrivbords- och serversystem. Därför är många erfarna programmerare intresserade av att lära sig Windows API så snart som möjligt, och den här boken är utformad för att främja detta.

Först och främst är det nödvändigt att berätta om vad Windows API är och visa hur du använder det i verkliga situationer, och den här historien ska vara så kortfattad som möjligt och inte överbelastad med onödiga detaljer. Därför är den här boken inte avsedd att användas som en referens guide, men för att bekanta sig med huvudegenskaperna hos de viktigaste funktionerna och demonstrera möjligheterna för deras tillämpning i praktiska programmeringssituationer. Beväpnad med denna kunskap kommer läsaren att kunna dra fördel av den omfattande hjälpdokumentationen som tillhandahålls av Microsoft för djupgående självstudier. enskilda frågor, avancerade funktioner och mindre funktioner, beroende på dina behov eller intresse. Personligen, med detta tillvägagångssätt, var det lätt för mig att lära mig Windows API, och att utveckla Windows-program var ett stort nöje, även om det också fanns några obehagliga stunder. Mina impulser av entusiasm är lätt synliga på vissa ställen i boken, vilket faktiskt inte är förvånande. Detta tyder dock inte alls på att jag villkorslöst håller med om Windows API:s överlägsenhet över API:et för andra operativsystem (OS), men knappast någon kommer att invända mot det faktum att det har många positiva egenskaper.

Författarna till många böcker om Windows ägnar stor uppmärksamhet åt att förklara vad processer är, virtuellt minne, kommunikation mellan processer som föregriper schemaläggaren, men som inte visar hur allt detta används i verkliga situationer. Programmerare med erfarenhet av UNIX, Linux, IBM MVS, Open VMS och vissa andra operativsystem är redan bekanta med dessa koncept, och de är bara intresserade av att gå vidare med att lära sig hur dessa funktioner implementeras i Windows så snabbt som möjligt. Dessutom ger de flesta böcker om Windows en viktig plats till programmeringsmetoder baserade på användargränssnitt. För att bara fokusera på de viktigaste grundläggande funktionerna som tillhandahålls av systemet, berör den här boken inte användargränssnittet, och vi begränsar vår diskussion till enkla konsolkaraktär I/O.

Enligt den här bokens synvinkel är Windows bara ett API. operativ system, som ger en uppsättning välförstådda verktyg. Många programmerare, oavsett erfarenhetsnivå, känner ett behov av accelererad inlärning av Windows, och utan kunskap om Windows är det otänkbart att diskutera ämnen som Component Object Model (COM) utvecklad av Microsoft. I vissa avseenden är Windows-system överlägsna andra system, i andra släpar de efter eller ligger på ungefär samma nivå. Syftet med den här boken är att visa hur man bäst använder dessa funktioner i verkliga situationer för att utveckla användbara, högkvalitativa och högpresterande applikationer.

Potentiell publik

Alla som snabbt vill lära sig att utveckla applikationer, oavsett erfarenhetsnivå.

Programmerare och utvecklare programvara, som står inför uppgiften att portera befintliga applikationer skrivna, särskilt för UNIX, till någon av Windows-plattformarna. Boken visar de jämförande egenskaperna hos de funktioner och programmeringsmodeller som är förknippade med använder Windows, UNIX och standardbiblioteket C. Var och en av de vanliga funktionalitet UNIX, inklusive processhantering, synkronisering, filsystem och kommunikation mellan processer, betraktas i termer av Windows.

Läsare börjar utveckla nya projekt som inte begränsas i sina handlingar av behovet av att porta befintliga programkoder till andra plattformar. Boken täcker många aspekter av programdesign och implementering och visar hur man använder den Windows-funktioner för att skapa användbara applikationer och lösa vanliga programmeringsproblem.

COM och .NET Framework programmerare som kommer att hitta en hel del av användbar information, underlätta studiet av principerna för dynamiska länkbibliotek (dynamiska länkbibliotek, DLL), trådmodeller och hur man använder dem, gränssnitt och synkronisering.

Studenter som studerar datavetenskap i sina seniora år på universitet eller är engagerade i utbildning avhandlingar relaterat till systemprogrammering eller applikationsutveckling. Boken kommer också att vara användbar för dem som studerar flertrådsprogrammering eller står inför behovet av att skapa nätverksapplikationer. Den kan också användas som användbart tillägg till källor som boken av W. Richard Stevens (W. Richard Stevens) Avancerad programmering i UNIX-miljön(se bibliografi) så att eleverna kan jämföra Windows-funktioner och UNIX. Den här boken kommer också att vara till stor hjälp för studenter som går en OS-kurs, eftersom den visar exakt hur den grundläggande funktionaliteten hos ett operativsystem av kommersiellt intresse tillhandahålls.

Det enda antagandet som är implicit i allt ovanstående är antagandet att läsarna har erfarenhet av programmering i C-språket.

Ändringar i tredje upplagan

Tillsammans med en betydande uppdatering och omorganisation från de två första utgåvorna, tillför den tredje upplagan en betydande mängd nytt material. Denna publikation syftar till att lösa följande uppgifter:

Täck de nya funktionerna som introduceras i Windows XP, Windows 2000 och Windows Server 2003, och överväg att flytta till Win64-plattformen.

Ta bort material specifikt för Windows 95, Windows 98 och Windows ME ("Windows 9x"-familjen) som föråldrat eftersom det för närvarande levereras personliga system Windows XP är installerat och begränsningarna i Windows 9x har redan förlorat sin relevans. Exempelprogrammen använder, utan förbehåll, verktyg som endast ingår i det aktuella Windows-versioner, även om vissa program inte fungerar på Windows 9x som ett resultat.

Ge mer omfattande täckning av ämnet trådning och synkronisering, inklusive prestanda, skalbarhet och tillförlitlighetsrelaterade aspekter. Kapitel 9, liksom några av exemplen i kapitel 10, är ​​nya.

Framhäv den växande effekten av Windows 2000 och Windows Server 2003 och de nya verktyg som de inkluderar på högpresterande, skalbara, flertrådiga serverapplikationsfunktioner.

Undersök beroendet av programmens prestanda på principerna för deras konstruktion, med särskild uppmärksamhet på flertrådade program med synkronisering och funktionerna i driften av dessa program under förhållanden med symmetriska multiprocessorsystem (Symmetrisk Multiprocessor, SMP).

Ta hänsyn till kommentarer från läsare och studenter om korrigering av brister och förbättring av presentationsstilen, såväl som alla deras råd och förslag, både viktiga och de mest obetydliga.

Hur denna bok är organiserad

Kapitlen är ordnade efter deras tematiska fokus, och därför övervägs först de verktyg som krävs för att köra enbart enkeltrådade applikationer, sedan diskuteras verktygen som används för att hantera processer och trådar, och först därefter diskuteras nätverksprogrammering i en flertrådig miljö. Denna organisation av boken gör det enkelt för läsaren att följa logiken i presentationen, sekventiellt gå från filsystem till minneshantering och filmappning, sedan till processer, trådar och synkronisering, och sedan till interprocesser och nätverkskommunikation och tillämpning säkerhetsproblem. Denna organisation tillåter också exempel att naturligt bygga vidare på när de blir mer komplexa, ungefär som en utvecklare gör när han först skapar en enkel prototyp och sedan gradvis introducerar ytterligare egenskaper. Övervägande av avancerade frågor, såsom asynkron I/O och säkerhetsfrågor, har flyttats till slutet av boken.

Inom varje kapitel, efter en kort diskussion om individuell funktionalitet, såsom processkontroll eller filvisning, diskuteras de viktigaste av de relevanta Windows-funktionerna och deras relation till varandra i detalj. Presentationen åtföljs av illustrativa exempel. Endast de mest betydande delarna av programförteckningarna ingår i huvudtexten; den fullständiga texten till programmen, såväl som nödvändiga inkluderande filer, hjälpfunktioner och annan kod, finns i bilaga A eller finns på bokens webbplats (http://www.awprofessional.com/titles/0321256190) . Närhelst funktioner endast stöds av nuvarande versioner av Windows (XP, 2000 och Server 2003) och inte stöds av tidigare versioner, såsom Windows 9x och Windows NT, som inte inkluderar många av de förbättrade funktionerna, gäller separata friskrivningar. Varje kapitel innehåller en lista över ytterligare rekommenderad läsning och erbjuder flera övningar. Många övningar fokuserar på frågor som är viktiga och av visst intresse men som inte har behandlats i huvudtexten, medan andra övningar tvingar läsaren att fördjupa sig i ämnen av mer komplex eller specialiserad karaktär.

Kapitel 1 ger en introduktion på hög nivå till Windows-familjen av operativsystem och Windows API:er. Används som exempel enkelt program Demonstrerar kärnelementen i Windows-programmeringsstilen och ger en grund för att implementera avancerade Windows-funktioner. Win64 och plattformsoberoende mjukvarumigreringsproblem diskuteras först i kapitel 1, utforskas mer utförligt i kapitel 16, och diskuteras vid behov under resten av boken.

Kapitel 2 och 3 omfattar filsystem, konsol I/O, fillåsning och kataloghantering. Kapitel 2 talar också om Unicode, den utökade teckenuppsättningen som används av Windows. Relevanta illustrativa exempel omfattar sekventiell och direkt åtkomst till data som finns i en fil, genomgång av katalogträd och filarkivering. Kapitel 3 avslutas med en diskussion om programmatisk registerhantering, som har mycket gemensamt med fil- och kataloghantering.

Kapitel 4 introducerar läsaren till Windows-undantagshantering, inklusive Structured Exception Handling (SEH), som kommer att användas flitigt genom hela boken. I många böcker skjuts studien av SEH upp till de sista kapitlen, men efter att ha blivit bekanta med detta verktyg redan i det inledande skedet kommer vi att kunna använda det omedelbart, vilket avsevärt kommer att förenkla vissa programmeringsuppgifter för oss och förbättra kvaliteten på våra program. Dessutom beskrivs här också en av de nyaste funktionerna, hantering av vektorundantag.

Kapitel 5 tittar på minneshantering i Windows och visar hur filmappning används inte bara för att förenkla programmering utan också för att förbättra programmets prestanda. Det här kapitlet diskuterar också organisationen av DLL:er.

Kapitel 6 ger en introduktion till processer, processhantering och enkla synkroniseringstekniker i Windows. Senare i kapitel 7 används dessa begrepp för att beskriva flödeskontroll. Exemplen i varje kapitel illustrerar de många fördelarna, inklusive programförenkling och prestandaförbättringar, som kommer av att använda trådar och processer.

Kapitel 8, 9 och 10 erbjuder en djupgående analys av en av de mest kraftfulla Windows-verktyg- trådsynkronisering. Synkronisering är ett komplext ämne, och som sådant innehåller dessa kapitel många exempel och beskrivningar som är ganska förståeliga modeller, vilket borde hjälpa läsaren att dra full nytta av trådar för att förbättra programmeringseffektiviteten och programprestandan samtidigt som man undviker många fallgropar. Dessa kapitel inkluderar nytt material, som täcker frågor om prestanda och skalbarhet, som är av särskild betydelse när du skapar serverapplikationer, inklusive de som är tänkta att köras på SMP-system.

Kapitel 11 och 12 ägnas åt kommunikation mellan processer och trådar, såväl som nätverksprogrammering. Kapitel 11 fokuserar på funktioner som är en del av Windows, nämligen anonyma pipes, namngivna pipes och brevlådor. Kapitel 12 diskuterar Windows Sockets (Windows Sockets), som ger möjlighet att kommunicera med system utanför Windows. Windows familj, genom standardprotokoll, främst TCP/IP. Även om Windows Sockets-gränssnittet strikt sett inte är en del av Windows API, kan det kommunicera och interagera över nätverk och Internet, så ämnet i det här kapitlet överensstämmer med resten av boken. Med hjälp av exemplet med ett flertrådigt klient-serversystem illustreras hur kommunikation mellan processer kan tillhandahållas tillsammans med trådar.

Kapitel 13 visar hur sätt Windows låter dig omvandla serverapplikationer som de som skapats i kapitel 11 och 12 till windows tjänster(Windows Services) som kan hanteras som back-end-servrar. Att konvertera en server till en tjänst kräver endast mindre ändringar i programmet.

Kapitel 14 visar hur man utför asynkrona I/O-operationer med överlappande I/O, såväl som händelser och kompletteringsrutiner. Samma resultat kan uppnås med trådar, så exempel ges för att jämföra olika lösningar vad gäller enkelhet och prestanda för respektive program. Samtidigt kräver byggandet av skalbara flertrådiga servrar användning av kompletteringsportar, vars användning illustreras av exemplet med servrar som skapats i tidigare kapitel. Väntetimer beskrivs också, vars diskussion kräver användning av begrepp som introducerats tidigare i detta kapitel.

Kapitel 15 fokuserar på Windows-objektsäkerhet och använder som exempel en emulering av ett filskyddssystem av UNIX-stil som kräver lämpliga behörigheter för att utföra vissa operationer på en fil. Ytterligare exempel illustrerar hur processer, gängor och namngivna rör skyddas. Säkerhetstillägg kan sedan läggas till de tidigare diskuterade exemplen.

Kapitel 16 avslutar huvudmaterialet med en diskussion om Win64-programmering och programvarukompatibilitet med denna plattform. Därefter konverteras ett av exemplen som behandlats tidigare till en form som gör att programmet kan portas till Win64-plattformen.

Bokens huvudmaterial kompletteras med tre bilagor. Bilaga A innehåller beskrivningar av de program som finns tillgängliga på bokens webbplats och rekommendationer för deras användning. Appendix B innehåller flera tabeller som jämför Windows-funktioner med motsvarande funktioner som tillhandahålls av UNIX och standardbiblioteket C. Appendix C jämför prestandan för alternativa implementeringar av några av exemplen i huvudtexten, vilket gör att läsaren kan bilda sig sin egen uppfattning om de relativa fördelarna och bristerna hos Windows-verktyg, både grundläggande och avancerade, och verktygen som tillhandahålls av C-biblioteket.

Jämförelse med UNIX och C-biblioteket

Under presentationen av materialet jämför vi stilen och funktionen hos Windows-verktygen och liknande verktyg som ingår i UNIX (Linux) och standardbiblioteket ANSI C. Som redan nämnts innehåller bilaga B tabeller som innehåller en komplett lista över jämförbara funktioner. Vi trodde att det skulle vara användbart att inkludera denna information, eftersom många läsare är bekanta med UNIX, och resultaten av att jämföra båda systemen med varandra kommer utan tvekan att vara av intresse för dem. De som inte är bekanta med UNIX-systemet kan säkert hoppa över de relevanta avsnitten, som är med finstilta och indragna för att göra dem lättare att urskilja.

Exemplen ska ge exempel på vanliga, vanligaste och praktiska användningar av Windows-funktioner.

De bör motsvara verkliga situationer från programmeringsområdet, som man måste möta i processen med mjukvaruutveckling, rådgivning och utbildning. Några av mina kunder och lyssnare har använt exempelkoderna när de bygger sina egna system. I mina konsultationer stöter jag ofta på programkoder liknande de som ingår i den här boken, och vid flera tillfällen har jag till och med blivit kontaktad med koder hämtade direkt från första eller andra upplagan. (Du kan förresten också använda exemplen från boken i ditt arbete, och om du även tar med tack till mig i dokumentationen så blir jag bara glad.) Jag stötte ofta på dessa koder som separata delar av COM eller C ++ objekt. Exempel, med hänsyn till begränsningarna för tidpunkten för deras förberedelse och den tillåtna mängden kod, är nära "verkliga livet" och löser "riktiga" problem.

Exemplen ska belysa funktionernas faktiska beteende och interaktion, som inte alltid är vad man kan förvänta sig efter att ha läst dokumentationen. I den här boken fokuserar både text och exempel inte på själva funktionerna, utan på hur de interagerar med varandra.

Exempelkod bör byggas inkrementellt och utökas för att lägga till ny funktionalitet till en tidigare lösning på ett enkelt och begripligt sätt, och demonstrera alternativa implementeringstekniker.

Många av exemplen i de första kapitlen implementerar UNIX-kommandon som ls, touch, chmod och sort, och presenterar därmed Windows-funktioner i ett välbekant sammanhang för vissa läsare samtidigt som de tillhandahåller en användbar uppsättning hjälpfunktioner. Dessutom närvaron olika alternativ Genom att implementera samma kommando blir det lättare att utvärdera prestandafördelarna med att använda Windows-förbättringar. De relevanta testresultaten finns i bilaga B.

Exemplen som ges i början av boken skiljer sig som regel åt i programmens korta längd, men i takt med att materialet blir mer komplicerat i efterföljande kapitel ökar storleken på den illustrativa programkoden vid behov avsevärt.

Övningarna i slutet av varje kapitel inbjuder läsaren att utveckla alternativa lösningar, utforska rekommenderade ämnen på egen hand eller bekanta sig med ytterligare funktioner som, även om de är intressanta, inte kan behandlas i detalj i den här boken. Vissa av övningarna är ganska enkla, medan andra kan vara svåra för dig. Ofta kommer du också att presenteras för uppenbart misslyckade lösningar, eftersom att identifiera och eliminera fel ger dig utmärkta möjligheter att finslipa dina kunskaper.

Alla exempel har felsökts och testats under operativsystemen Windows XP, Windows 2000 och Windows Server 2003. – Vid behov utfördes testning under operativsystemen Windows 9x och Windows NT. Och även om enprocessorsystem bygger på Intel-processorer, de flesta av programmen testades också på multiprocessorsystem. När du testar applikationer med klient-server-arkitektur flera klienter som interagerar med servern användes samtidigt. Program kan dock aldrig sägas vara korrekta eller fullständiga och lämpliga för något syfte. Utan tvekan kan även de enklaste exemplen vara felaktiga och, under vissa omständigheter, inte fungera alls - sådant är ödet för nästan vilken programvara som helst. Därför kommer författaren att vara uppriktigt tacksam för alla som skickar rapporter om eventuella defekter som hittats i programmen, och ännu bättre - om fel.

Webbplatser för denna bok

Bokens webbplats (http://www.awprofessional.com/titles/0321256190) innehåller en nedladdning som innehåller all kod och projekt för alla exempel i boken, lösningar på några av övningarna, alternativa implementeringar av några av exemplen , instruktioner samt resultaten av testprestandautvärderingar. Denna information uppdateras regelbundet vid behov för att inkludera nytt material och göra nödvändiga korrigeringar.

På min personliga webbplats (http://www.world.std.com/~jmhart/windows.htm) hittar du en lista över errata som finns i boken, samt ytterligare exempel, läsarbrev och ytterligare förklaringar bland många andra.. Dessutom ingår PowerPoint-bilder som kan användas för icke-kommersiella utbildningsändamål. Dessa bilder har redan använts av studenter i många professionella kurser, men de är också lämpliga att använda på högskolor.

I takt med att brister och fel identifieras och feedback från läsarna tas emot kommer detta material att uppdateras med jämna mellanrum. Om du stöter på några problem med programmen eller annat material i boken, vänligen besök de angivna sidorna först, där du kanske kan hitta nödvändiga förklaringar eller få information om de fel som upptäckts hittills. Om ett sådant försök att få svar på din fråga misslyckas, vänligen kontakta mig direkt på följande adress. E-post: [e-postskyddad]

Tack

Under utarbetandet av den tredje upplagan var det många som gav mig effektiv hjälp, gav råd eller helt enkelt stöttade vänliga ord, och läsarna föreslog ett antal värdefulla idéer och kommentarer. Författarens webbplats uttrycker en varm tacksamhet till alla dem vars råd och kommentarer letat sig in i den tredje upplagan av boken, medan de två första upplagorna innehåller tack till dem som gav oss värdefulla råd tidigare. Dessutom nyligen gjorda recensioner av Vagif Abilov, Bill Draper, Horst D. Clausen, Michael Davidson, Daniel Jiang ), Eric Landes, Klaus H. Probst och Douglas Reilly, som tog jobbet mycket mer seriöst än enbart formella plikter skulle kräva; deras råd och rekommendationer förtjänar den djupaste tacksamhet, och jag kan bara hoppas att jag behandlade resultatet av deras arbete med inte mindre uppmärksamhet. Ett särskilt tack går till mina vänner på ArrAy Inc.; Jag har lärt mig mycket av dem.

Anne H Smith, som gjorde sättningen, lade all sin skicklighet, uthållighet och tålamod på att förbereda boken för publicering; Utan hennes bidrag hade den här boken inte publicerats. Elissa Armor, som förberedde layouterna för de två första utgåvorna, lade grunden för den nuvarande utgåvan och gjorde övergången så smidig som möjligt.

Chrysta Meadowbrooke, redaktör för manuskriptet, har avsevärt förbättrat presentationens noggrannhet, tydlighet och koherens. Hennes uppmärksamma inställning till bokens innehåll, skarpa frågor och insikt bidrog till att kasta mer djup i en rad frågor.

Personalen på Addison-Wesley Professional visade en sådan professionalism och kunskap att det var ett nöje att arbeta med dem. Stephanie Nakib, redaktör, och Karen Gettman, chefredaktör, arbetade med projektet från första början, skyndade på mig när det behövdes, rensade allt skräp och såg till att jag inte avvek ett jota från arbetsschemat. Ebony Haight, Associate Editor, övervakade hela processen, medan John Fullers produktionsteam och Patrick Cash-Peterson, produktionskoordinator, förleddes att tro att produktionsprocessen inte kunde kopplas ihop utan svårighet.

Den här boken är tillägnad våra älskade Bob och Elizabeth.

Johnson (John) M. Hart (Johnson (John) M. Hart) [e-postskyddad] augusti 2004

Från förlaget

Du, läsaren av denna bok, är dess främsta kritiker och kommentator. Vi värdesätter din åsikt och vill veta vad vi gjorde rätt, vad som kunde ha gjorts bättre och vad mer du skulle vilja se publicerat av oss. Vi är intresserade av att höra andra kommentarer som du vill framföra till oss.

Vi väntar på dina kommentarer och ser fram emot dem. Du kan skicka oss papper eller e-post, eller helt enkelt besök vår webbserver och lämna dina kommentarer där. Med ett ord, på något sätt som är bekvämt för dig, låt oss veta om du gillar den här boken eller inte, och uttryck också din åsikt om hur vi kan göra våra böcker mer intressanta för dig.

När du skickar ett brev eller meddelande, glöm inte att inkludera titeln på boken och dess författare, samt din returadress. Vi kommer noggrant att läsa din åsikt och se till att ta hänsyn till den när vi väljer och förbereder för publicering av efterföljande böcker.

Våra koordinater:

E-post: [e-postskyddad]

WWW: http://www.williamspublishing.com

Information för brev från: Ryssland: 115419, Moskva, PO Box 783 Ukraina: 03150, Kiev, PO Box 152


Johnson M. Hart Systemprogrammering V Windows-miljö Tredje upplagan

Introduktion

Den här boken beskriver hur man utvecklar applikationer med hjälp av Application Programming Interface (API) i Microsofts Windows-operativsystem, med fokus på grundläggande systemtjänster, inklusive filsystemhantering, process- och trådhantering, kommunikation mellan processer, nätverksprogrammering och synkronisering. Användargränssnitt, interna Windows och I/O-drivrutiner behandlas inte i den här boken, även om dessa ämnen är lika viktiga och intressanta i sig. Till exempel valdes huvudsakligen realistiska scenarier, och därför kan många av dem mycket väl fungera som grund för att bygga verkliga applikationer.

Win32/Win64 API:er, eller generiskt Windows API:er, stöds av Microsofts familj av 32-bitars och 64-bitars operativsystem, som för närvarande inkluderar Windows XP, Windows 2000 och Windows Server 2003. Tidiga medlemmar av denna familj inkluderar Windows NT-operativsystem , Windows Me, Windows 98 och Windows 95; dessa system anses nu vara föråldrade, men många av exempelprogrammen i den här boken kan köras under dem. Migreringsfrågor från Win32-plattformen till den utvecklande Win64-plattformen diskuteras vid behov. Stöds som ett 64-bitars gränssnitt i vissa versioner av Windows Server 2003 och Windows XP, Win64 är nästan identisk med Win32.

Det råder ingen tvekan om att Windows API är den viktigaste faktorn som påverkar hela och i många fall ersätter POSIX API som stöds av UNIX och Linux operativsystem, eftersom det anses vara mer att föredra eller åtminstone ger samma möjligheter för applikationer. , fokuserad på skrivbords- och serversystem. Därför är många erfarna programmerare intresserade av att lära sig Windows API så snart som möjligt, och den här boken är utformad för att främja detta.

Först och främst är det nödvändigt att berätta om vad Windows API är och visa hur du använder det i verkliga situationer, och den här historien ska vara så kortfattad som möjligt och inte överbelastad med onödiga detaljer. Därför är den här boken inte tänkt att användas som en referensguide, utan för att introducera dig till de grundläggande egenskaperna hos de viktigaste funktionerna och visa hur de kan användas i praktiska programmeringssituationer. Beväpnad med denna kunskap kommer läsaren att kunna dra nytta av den omfattande hjälpdokumentationen som tillhandahålls av Microsoft för självguidad djupgående utforskning av specifika ämnen, avancerade funktioner och mindre kända funktioner, i enlighet med deras behov eller intressen. Personligen, med detta tillvägagångssätt, var det lätt för mig att lära mig Windows API, och att utveckla Windows-program var ett stort nöje, även om det också fanns några obehagliga stunder. Mina impulser av entusiasm är lätt synliga på vissa ställen i boken, vilket faktiskt inte är förvånande. Detta tyder dock inte alls på att jag villkorslöst håller med om Windows API:s överlägsenhet över API:et för andra operativsystem (OS), men knappast någon kommer att invända mot det faktum att det har många positiva egenskaper.

Författarna till många böcker om Windows lägger ner mycket tid på att förklara vad processer, virtuellt minne, kommunikation mellan processer, förebyggande schemaläggare är, men de visar inte hur allt detta används i verkliga situationer. Programmerare med erfarenhet av UNIX, Linux, IBM MVS, Open VMS och vissa andra operativsystem är redan bekanta med dessa koncept, och de är bara intresserade av att gå vidare med att lära sig hur dessa funktioner implementeras i Windows så snabbt som möjligt. Dessutom har de flesta Windows-böcker ett starkt fokus på tekniker för programmering av användargränssnitt. För att bara fokusera på de viktigaste grundläggande funktionerna som tillhandahålls av systemet, berör den här boken inte användargränssnittet, och vi begränsar vår diskussion till enkla konsolkaraktär I/O.

Enligt den här bokens synvinkel är Windows bara ett operativsystems API som tillhandahåller en uppsättning välförstådda faciliteter. Många programmerare, oavsett erfarenhetsnivå, känner ett behov av accelererad inlärning av Windows, och utan kunskap om Windows är det otänkbart att diskutera ämnen som Component Object Model (COM) utvecklad av Microsoft. I vissa avseenden är Windows-system överlägsna andra system, i andra släpar de efter eller ligger på ungefär samma nivå. Syftet med den här boken är att visa hur man bäst använder dessa funktioner i verkliga situationer för att utveckla användbara, högkvalitativa och högpresterande applikationer.

Johnson M. Hart

Systemprogrammering i Windows-miljö

Tredje upplagan

Introduktion

Den här boken beskriver hur man utvecklar applikationer med hjälp av Application Programming Interface (API) i Microsofts Windows-operativsystem, med fokus på grundläggande systemtjänster, inklusive filsystemhantering, process- och trådhantering, kommunikation mellan processer, nätverksprogrammering och synkronisering. Användargränssnitt, interna Windows och I/O-drivrutiner behandlas inte i den här boken, även om dessa ämnen är lika viktiga och intressanta i sig. Till exempel valdes huvudsakligen realistiska scenarier, och därför kan många av dem mycket väl fungera som grund för att bygga verkliga applikationer.

Win32/Win64 API:er, eller generiskt Windows API:er, stöds av Microsofts familj av 32-bitars och 64-bitars operativsystem, som för närvarande inkluderar Windows XP, Windows 2000 och Windows Server 2003. Tidiga medlemmar av denna familj inkluderar Windows NT-operativsystem , Windows Me, Windows 98 och Windows 95; dessa system anses nu vara föråldrade, men många av exempelprogrammen i den här boken kan köras under dem. Migreringsfrågor från Win32-plattformen till den utvecklande Win64-plattformen diskuteras vid behov. Stöds som ett 64-bitars gränssnitt i vissa versioner av Windows Server 2003 och Windows XP, Win64 är nästan identisk med Win32.

Det råder ingen tvekan om att Windows API är den viktigaste faktorn som påverkar hela och i många fall ersätter POSIX API som stöds av UNIX och Linux operativsystem, eftersom det anses vara mer att föredra eller åtminstone ger samma möjligheter för applikationer. , fokuserad på skrivbords- och serversystem. Därför är många erfarna programmerare intresserade av att lära sig Windows API så snart som möjligt, och den här boken är utformad för att främja detta.

Först och främst är det nödvändigt att berätta om vad Windows API är och visa hur du använder det i verkliga situationer, och den här historien ska vara så kortfattad som möjligt och inte överbelastad med onödiga detaljer. Därför är den här boken inte tänkt att användas som en referensguide, utan för att introducera dig till de grundläggande egenskaperna hos de viktigaste funktionerna och visa hur de kan användas i praktiska programmeringssituationer. Beväpnad med denna kunskap kommer läsaren att kunna dra nytta av den omfattande hjälpdokumentationen som tillhandahålls av Microsoft för självguidad djupgående utforskning av specifika ämnen, avancerade funktioner och mindre kända funktioner, i enlighet med deras behov eller intressen. Personligen, med detta tillvägagångssätt, var det lätt för mig att lära mig Windows API, och att utveckla Windows-program var ett stort nöje, även om det också fanns några obehagliga stunder. Mina impulser av entusiasm är lätt synliga på vissa ställen i boken, vilket faktiskt inte är förvånande. Detta tyder dock inte alls på att jag villkorslöst håller med om Windows API:s överlägsenhet över API:et för andra operativsystem (OS), men knappast någon kommer att invända mot det faktum att det har många positiva egenskaper.

Författarna till många böcker om Windows lägger ner mycket tid på att förklara vad processer, virtuellt minne, kommunikation mellan processer, förebyggande schemaläggare är, men de visar inte hur allt detta används i verkliga situationer. Programmerare med erfarenhet av UNIX, Linux, IBM MVS, Open VMS och vissa andra operativsystem är redan bekanta med dessa koncept, och de är bara intresserade av att gå vidare med att lära sig hur dessa funktioner implementeras i Windows så snabbt som möjligt. Dessutom har de flesta Windows-böcker ett starkt fokus på tekniker för programmering av användargränssnitt. För att bara fokusera på de viktigaste grundläggande funktionerna som tillhandahålls av systemet, berör den här boken inte användargränssnittet, och vi begränsar vår diskussion till enkla konsolkaraktär I/O.

Enligt den här bokens synvinkel är Windows bara ett operativsystems API som tillhandahåller en uppsättning välförstådda faciliteter. Många programmerare, oavsett erfarenhetsnivå, känner ett behov av accelererad inlärning av Windows, och utan kunskap om Windows är det otänkbart att diskutera ämnen som Component Object Model (COM) utvecklad av Microsoft. I vissa avseenden är Windows-system överlägsna andra system, i andra släpar de efter eller ligger på ungefär samma nivå. Syftet med den här boken är att visa hur man bäst använder dessa funktioner i verkliga situationer för att utveckla användbara, högkvalitativa och högpresterande applikationer.

Potentiell publik

Alla som snabbt vill lära sig att utveckla applikationer, oavsett erfarenhetsnivå.

Programmerare och mjukvaruutvecklare som står inför uppgiften att porta befintliga applikationer skrivna specifikt för UNIX till någon av Windows-plattformarna. Boken visar de relativa funktionerna och programmeringsmodellerna för att använda Windows, UNIX och standardbiblioteket C. Var och en av de vanliga UNIX-funktionerna, inklusive processhantering, synkronisering, filsystem och kommunikation mellan processer, diskuteras i Windows-termer. .

Läsare börjar utveckla nya projekt som inte begränsas i sina handlingar av behovet av att porta befintliga programkoder till andra plattformar. Den här boken täcker många aspekter av programdesign och implementering och visar hur man använder Windows-funktioner för att skapa användbara applikationer och lösa vanliga programmeringsproblem.

COM- och .NET Framework-programmerare hittar mycket användbar information här för att hjälpa dem att lära sig om dynamiska länkbibliotek (DLL), trådningsmodeller och hur man använder dem, gränssnitt och synkronisering.

Studenter som är grundutbildning i datavetenskap eller som arbetar med grundexamensarbeten relaterade till systemprogrammering eller applikationsutveckling. Boken kommer också att vara användbar för dem som studerar flertrådsprogrammering eller står inför behovet av att skapa nätverksapplikationer. Det kan också användas som ett användbart komplement till källor som W. Richard Stevens Avancerad programmering i UNIX-miljön(se bibliografi), vilket gör att eleverna kan jämföra funktionerna i Windows och UNIX. Den här boken kommer också att vara till stor hjälp för studenter som går en OS-kurs, eftersom den visar exakt hur den grundläggande funktionaliteten hos ett operativsystem av kommersiellt intresse tillhandahålls.

Det enda antagandet som är implicit i allt ovanstående är antagandet att läsarna har erfarenhet av programmering i C-språket.

Ändringar i tredje upplagan

Tillsammans med en betydande uppdatering och omorganisation från de två första utgåvorna, tillför den tredje upplagan en betydande mängd nytt material. Denna publikation syftar till att lösa följande uppgifter:

Täck de nya funktionerna som introduceras i Windows XP, Windows 2000 och Windows Server 2003, och överväg att flytta till Win64-plattformen.

Ta bort Windows 95, Windows 98 och Windows ME-specifikt material ("Windows 9x"-familjen) som föråldrat eftersom personliga system som för närvarande levereras kör Windows XP och begränsningarna för Windows 9x inte längre är giltiga. I exempelprogrammen används, utan några reservationer, verktyg som endast ingår i nuvarande versioner Windows, även om vissa program inte fungerar på Windows 9x som ett resultat.

Ge mer omfattande täckning av ämnet trådning och synkronisering, inklusive prestanda, skalbarhet och tillförlitlighetsrelaterade aspekter. Kapitel 9, liksom några av exemplen i kapitel 10, är ​​nya.

Framhäv den växande effekten av Windows 2000 och Windows Server 2003 och de nya verktyg som de inkluderar på högpresterande, skalbara, flertrådiga serverapplikationsfunktioner.

Undersök beroendet av programmens prestanda på principerna för deras konstruktion, med särskild uppmärksamhet på flertrådade program med synkronisering och funktionerna i driften av dessa program under förhållanden med symmetriska multiprocessorsystem (Symmetrisk Multiprocessor, SMP).