Järjestelmäohjelmointi Windows-ympäristössä: Johnson Hart. Johnson Hart - Järjestelmäohjelmointi Windows-ympäristössä Hart järjestelmäohjelmointi Windows-ympäristössä


Johnson M. Hart Windows Systems Programming Third Edition

Johdanto

Tässä kirjassa kuvataan sovellusten kehitystä Microsoftin Windows-käyttöjärjestelmien API (Application Programming Interface) avulla keskittyen ydinjärjestelmäpalveluihin, mukaan lukien tiedostojärjestelmä, prosessien ja säikeiden hallinta, prosessien välinen viestintä, verkkoohjelmointi ja synkronointi. Käyttöliittymiä, Windowsin sisäisiä osia ja I/O-ajureita ei käsitellä tässä kirjassa, vaikka nämä aiheet ovat yhtä tärkeitä ja kiinnostavia sinänsä. Esimerkit perustuivat pääosin realistisiin skenaarioihin, joten monet niistä voivat toimia pohjana tosielämän sovellusten rakentamiselle.

Win32/Win64 API tai yleisesti Windows API tukee Microsoftin 32- ja 64-bittisten käyttöjärjestelmien perhettä, joka sisältää tällä hetkellä Windows XP:n, Windows 2000:n ja Windows Server 2003:n. Tämän perheen varhaisia ​​jäseniä ovat Windows NT käyttöjärjestelmät , Windows Me, Windows 98 ja Windows 95; Näitä järjestelmiä pidetään nyt vanhentuneina, mutta monet kirjan esimerkkiohjelmat voidaan ajaa niiden hallinnassa. Tarvittaessa keskustellaan siirtymisestä Win32-alustasta kehittyvään Win64-alustaan. Win64, jota tuetaan 64-bittisenä käyttöliittymänä joissakin Windows Server 2003:n ja Windows XP:n versioissa, on lähes identtinen Win32:n kanssa.

Ei ole epäilystäkään siitä, että Windows API on tärkein tekijä, joka vaikuttaa koko sovelluskehitysprosessiin ja monissa tapauksissa korvaa UNIX- ja Linux-käyttöjärjestelmien tukeman POSIX API:n, koska sitä pidetään parempana tai ainakin tarjoaa samat ominaisuudet. työpöytä- ja palvelinjärjestelmiin suuntautuneille sovelluksille. Siksi monet kokeneet ohjelmoijat ovat kiinnostuneita opettelemaan Windows API:n mahdollisimman nopeasti, ja tämä kirja on suunniteltu helpottamaan tätä.

Ensinnäkin meidän on kerrottava sinulle, mikä Windows API on, ja näytettävä, kuinka sitä käytetään tosielämän tilanteissa, pitäen tämä tarina mahdollisimman lyhyenä eikä ylikuormitettu tarpeettomilla yksityiskohdilla. Siksi tätä kirjaa ei ole tarkoitettu käytettäväksi viiteoppaana, vaan esittelemään tärkeimpien funktioiden perusominaisuudet ja osoittamaan, kuinka niitä voidaan käyttää käytännön ohjelmointitilanteissa. Tämän tiedon avulla lukija voi käyttää Microsoftin tarjoamaa laajaa ohjedokumentaatiota tutkiakseen itsenäisesti tiettyjä aiheita, lisäominaisuuksia ja vähemmän ilmeisiä ominaisuuksia tarpeidensa tai kiinnostuksen kohteidensa perusteella. Henkilökohtaisesti tällä lähestymistavalla Windows API:n oppiminen oli minulle helppoa ja Windows-ohjelmien kehittäminen oli suuri ilo, vaikka epämiellyttäviäkin hetkiä oli. Innostukseni ovat paikoin helposti nähtävissä kirjassa, mikä ei itse asiassa ole yllättävää. Tämä ei kuitenkaan suinkaan tarkoita sitä, että olisin ehdoitta samaa mieltä Windows API:n paremmuudesta muiden käyttöjärjestelmien (OS) API:ihin nähden, mutta on epätodennäköistä, että kukaan vastustaa sitä, että sillä on paljon positiivisia ominaisuuksia.

Monissa Windows-kirjoissa kuluu paljon aikaa selittääkseen, mitä prosessit, virtuaalimuisti, prosessien välinen viestintä ja ennaltaehkäisevä ajoitus ovat, mutta ne eivät osoita, kuinka näitä asioita käytetään tosielämän tilanteissa. Ohjelmoijat, joilla on kokemusta UNIXin, Linuxin, IBM MVS:n, Open VMS:n ja joidenkin muiden käyttöjärjestelmien kanssa työskentelystä, ovat jo tuttuja näistä käsitteistä, ja heitä kiinnostaa vain siirtyä opiskelemaan näiden ominaisuuksien käyttöönottoa Windowsissa mahdollisimman nopeasti. Lisäksi useimmat Windows-kirjat keskittyvät voimakkaasti käyttöliittymäpohjaisiin ohjelmointitekniikoihin. Jotta voimme keskittyä vain järjestelmän tarjoamiin tärkeimpiin perusominaisuuksiin, tässä kirjassa ei käsitellä käyttöliittymän aihetta, ja rajoitamme keskustelemaan vain yksinkertaisesta konsolin merkkien syötöstä/tulosta.

Tässä kirjassa omaksutun näkökulman mukaan Windows on vain käyttöjärjestelmän API, joka tarjoaa joukon täysin ymmärrettäviä työkaluja. Monet ohjelmoijat kokemuksestaan ​​riippumatta kokevat tarpeen nopeuttaa Windowsin oppimista, ja ilman Windows-tietoa on mahdotonta keskustella sellaisista aiheista kuin Microsoftin kehittämä Component Object Model (COM). Joissakin suhteissa Windows-järjestelmät ovat muita järjestelmiä parempia, toisissa ne ovat jäljessä tai ovat suunnilleen samanlaisia. Tämän kirjan tavoitteena on osoittaa, kuinka näitä ominaisuuksia voidaan parhaiten hyödyntää todellisissa tilanteissa hyödyllisten, laadukkaiden ja suorituskykyisten sovellusten kehittämiseksi.

Johnson M. Hart

Järjestelmäohjelmointi Windows-ympäristössä

Kolmas painos

Johdanto

Tässä kirjassa kuvataan sovellusten kehitystä Microsoftin Windows-käyttöjärjestelmien API (Application Programming Interface) avulla keskittyen ydinjärjestelmäpalveluihin, mukaan lukien tiedostojärjestelmä, prosessien ja säikeiden hallinta, prosessien välinen viestintä, verkkoohjelmointi ja synkronointi. Käyttöliittymiä, Windowsin sisäisiä osia ja I/O-ajureita ei käsitellä tässä kirjassa, vaikka nämä aiheet ovat yhtä tärkeitä ja kiinnostavia sinänsä. Esimerkit perustuivat pääosin realistisiin skenaarioihin, joten monet niistä voivat toimia pohjana tosielämän sovellusten rakentamiselle.

Win32/Win64 API tai yleisesti Windows API tukee Microsoftin 32- ja 64-bittisten käyttöjärjestelmien perhettä, joka sisältää tällä hetkellä Windows XP:n, Windows 2000:n ja Windows Server 2003:n. Tämän perheen varhaisia ​​jäseniä ovat Windows NT käyttöjärjestelmät , Windows Me, Windows 98 ja Windows 95; Näitä järjestelmiä pidetään nyt vanhentuneina, mutta monet kirjan esimerkkiohjelmat voidaan ajaa niiden hallinnassa. Tarvittaessa keskustellaan siirtymisestä Win32-alustasta kehittyvään Win64-alustaan. Win64, jota tuetaan 64-bittisenä käyttöliittymänä joissakin Windows Server 2003:n ja Windows XP:n versioissa, on lähes identtinen Win32:n kanssa.

Ei ole epäilystäkään siitä, että Windows API on tärkein tekijä, joka vaikuttaa koko sovelluskehitysprosessiin ja monissa tapauksissa korvaa UNIX- ja Linux-käyttöjärjestelmien tukeman POSIX API:n, koska sitä pidetään parempana tai ainakin tarjoaa samat ominaisuudet. työpöytä- ja palvelinjärjestelmiin suuntautuneille sovelluksille. Siksi monet kokeneet ohjelmoijat ovat kiinnostuneita opettelemaan Windows API:n mahdollisimman nopeasti, ja tämä kirja on suunniteltu helpottamaan tätä.

Ensinnäkin meidän on kerrottava sinulle, mikä Windows API on, ja näytettävä, kuinka sitä käytetään tosielämän tilanteissa, pitäen tämä tarina mahdollisimman lyhyenä eikä ylikuormitettu tarpeettomilla yksityiskohdilla. Siksi tätä kirjaa ei ole tarkoitettu käytettäväksi viiteoppaana, vaan esittelemään tärkeimpien funktioiden perusominaisuudet ja osoittamaan, kuinka niitä voidaan käyttää käytännön ohjelmointitilanteissa. Tämän tiedon avulla lukija voi käyttää Microsoftin tarjoamaa laajaa ohjedokumentaatiota tutkiakseen itsenäisesti tiettyjä aiheita, lisäominaisuuksia ja vähemmän ilmeisiä ominaisuuksia tarpeidensa tai kiinnostuksen kohteidensa perusteella. Henkilökohtaisesti tällä lähestymistavalla Windows API:n oppiminen oli minulle helppoa ja Windows-ohjelmien kehittäminen oli suuri ilo, vaikka epämiellyttäviäkin hetkiä oli. Innostukseni ovat paikoin helposti nähtävissä kirjassa, mikä ei itse asiassa ole yllättävää. Tämä ei kuitenkaan suinkaan tarkoita sitä, että olisin ehdoitta samaa mieltä Windows API:n paremmuudesta muiden käyttöjärjestelmien (OS) API:ihin nähden, mutta on epätodennäköistä, että kukaan vastustaa sitä, että sillä on paljon positiivisia ominaisuuksia.

Monissa Windows-kirjoissa kuluu paljon aikaa selittääkseen, mitä prosessit, virtuaalimuisti, prosessien välinen viestintä ja ennaltaehkäisevä ajoitus ovat, mutta ne eivät osoita, kuinka näitä asioita käytetään tosielämän tilanteissa. Ohjelmoijat, joilla on kokemusta UNIXin, Linuxin, IBM MVS:n, Open VMS:n ja joidenkin muiden käyttöjärjestelmien kanssa työskentelystä, ovat jo tuttuja näistä käsitteistä, ja heitä kiinnostaa vain siirtyä opiskelemaan näiden ominaisuuksien käyttöönottoa Windowsissa mahdollisimman nopeasti. Lisäksi useimmat Windows-kirjat keskittyvät voimakkaasti käyttöliittymäpohjaisiin ohjelmointitekniikoihin. Jotta voimme keskittyä vain järjestelmän tarjoamiin tärkeimpiin perusominaisuuksiin, tässä kirjassa ei käsitellä käyttöliittymän aihetta, ja rajoitamme keskustelemaan vain yksinkertaisesta konsolin merkkien syötöstä/tulosta.

Tässä kirjassa omaksutun näkökulman mukaan Windows on vain käyttöjärjestelmän API, joka tarjoaa joukon täysin ymmärrettäviä työkaluja. Monet ohjelmoijat kokemuksestaan ​​riippumatta kokevat tarpeen nopeuttaa Windowsin oppimista, ja ilman Windows-tietoa on mahdotonta keskustella sellaisista aiheista kuin Microsoftin kehittämä Component Object Model (COM). Joissakin suhteissa Windows-järjestelmät ovat muita järjestelmiä parempia, toisissa ne ovat jäljessä tai ovat suunnilleen samanlaisia. Tämän kirjan tavoitteena on osoittaa, kuinka näitä ominaisuuksia voidaan parhaiten hyödyntää todellisissa tilanteissa hyödyllisten, laadukkaiden ja suorituskykyisten sovellusten kehittämiseksi.

Potentiaalinen yleisö

Kaikki, jotka haluavat nopeasti oppia kehittämään sovelluksia, taitotasosta riippumatta.

Ohjelmoijat ja ohjelmistokehityksen ammattilaiset, joiden tehtävänä on siirtää olemassa olevia sovelluksia, erityisesti UNIXille kirjoitettuja, mihin tahansa Windows-alustaan. Kirja vertailee Windowsin, UNIXin ja C-standardin kirjaston käyttöön liittyviä ominaisuuksia ja ohjelmointimalleja. Kaikki yleiset UNIX-toiminnot, mukaan lukien prosessinhallinta, synkronointi, tiedostojärjestelmät ja prosessien välinen viestintä, käsitellään Windows-termeillä.

Lukijat, jotka alkavat kehittää uusia projekteja, joiden toimintaa ei rajoita tarve siirtää olemassa olevia ohjelmakoodeja muille alustoille. Kirja kattaa monia ohjelmien suunnittelun ja toteutuksen näkökohtia ja osoittaa, kuinka Windowsin ominaisuuksia käytetään hyödyllisten sovellusten luomiseen ja yleisten ohjelmointiongelmien ratkaisemiseen.

COM:ia ja .NET Frameworkia käyttävät ohjelmoijat löytävät täältä paljon hyödyllistä tietoa, joka helpottaa dynaamisten linkkikirjastojen (DLL) periaatteiden, säikeen mallien ja niiden käytön, rajapintojen ja synkronoinnin tutkimista.

Opiskelijat, jotka opiskelevat ylioppilasvuosinaan tietojenkäsittelytiedettä tai tekevät opinnäytetyötään järjestelmäohjelmointiin tai sovelluskehitykseen liittyen. Kirja on hyödyllinen myös niille, jotka opiskelevat monisäikeistä ohjelmointia tai joutuvat luomaan verkkosovelluksia. Sitä voidaan käyttää myös hyödyllisenä täydennyksenä lähteille, kuten W. Richard Stevensin kirjalle Kehittynyt ohjelmointi UNIX-ympäristössä(katso bibliografia), jonka avulla opiskelijat voivat vertailla Windowsin ja UNIXin ominaisuuksia. Tämä kirja on suureksi avuksi myös käyttöjärjestelmäkurssia suorittaville opiskelijoille, koska se näyttää tarkalleen, kuinka kaupallisesti kiinnostavien käyttöjärjestelmien perustoiminnot tarjotaan.

Ainoa oletus, joka sisältyy kaikkeen yllä olevaan, on oletus, että lukijoilla on C-ohjelmointikokemus.

Muutoksia kolmannessa painoksessa

Kahden ensimmäisen painoksen merkittävien päivitysten ja uudelleenjärjestelyjen ohella kolmas painos lisää runsaasti uutta materiaalia. Tämä julkaisu on tarkoitettu ratkaisemaan seuraavat ongelmat:

Kattaa Windows XP:ssä, Windows 2000:ssa ja Windows Server 2003:ssa käyttöön otetut uudet ominaisuudet ja harkitse siirtymistä Win64-alustalle.

Sulje pois materiaali, joka ottaa huomioon Windows 95:n, Windows 98:n ja Windows ME:n ("Windows 9x" -perhe) erityispiirteet vanhentuneena, koska Windows XP on asennettu tällä hetkellä toimitettaviin henkilökohtaisiin järjestelmiin ja Windows 9x:n rajoitukset ovat jo menettäneet merkityksensä. merkityksellisyys. Esimerkkiohjelmat käyttävät ilman minkäänlaista pätevyyttä ominaisuuksia, jotka sisältyvät vain nykyisiin Windows-versioihin, vaikka sen seurauksena jotkin ohjelmat eivät toimi Windows 9x:ssä.

Tarjoa kattavampi ketjuttaminen ja synkronointi, mukaan lukien niihin liittyvät suorituskyky-, skaalautuvuus- ja luotettavuusnäkökohdat. Luku 9 sekä jotkin luvun 10 esimerkit ovat uusia.

Korosta Windows 2000:n ja Windows Server 2003:n ja niiden uusien ominaisuuksien kasvavaa vaikutusta tehokkaiden, skaalautuvien, monisäikeisten palvelinsovellusten ominaisuuksiin.

Selvitä ohjelmien suorituskyvyn riippuvuus niiden rakentamisen periaatteista kiinnittäen erityistä huomiota monisäikeisiin ohjelmiin, joissa on synkronointi, sekä näiden ohjelmien käytön ominaisuudet symmetristen moniprosessorijärjestelmien (SMP) olosuhteissa.


Tämä kirja on omistettu Microsoft-käyttöjärjestelmien (Windows 9x, Windows XP, Windows 2000 ja Windows Server 2003) sovellusohjelmointirajapintaa käyttävien sovellusten kehittämiseen. Painopiste on ydinjärjestelmäpalveluihin, mukaan lukien tiedostojärjestelmä, prosessien ja säikeiden hallinta, prosessien välinen viestintä, verkkoohjelmointi ja synkronointi. Tarkastellaan tekniikkaa, jolla Win32-ympäristössä kirjoitetut sovellukset siirretään Win64-ympäristöön. Kaikki Windowsin tietoturvaan liittyvät näkökohdat ja sen käytännön sovellukset kuvataan yksityiskohtaisesti. Myös kirjan verkkosivuilta löytyvät runsaasti tosielämän esimerkit yksinkertaistavat materiaalin oppimista huomattavasti.

Kirja on suunnattu kehittäjille ja ohjelmoijille, sekä korkeasti koulutetuille että aloittelijoille, ja se on hyödyllinen myös asianomaisten erikoisalojen opiskelijoille.

Johdanto

Tässä kirjassa kuvataan sovellusten kehitystä Microsoftin Windows-käyttöjärjestelmien API (Application Programming Interface) avulla keskittyen ydinjärjestelmäpalveluihin, mukaan lukien tiedostojärjestelmä, prosessien ja säikeiden hallinta, prosessien välinen viestintä, verkkoohjelmointi ja synkronointi. Käyttöliittymiä, Windowsin sisäisiä osia ja I/O-ajureita ei käsitellä tässä kirjassa, vaikka nämä aiheet ovat yhtä tärkeitä ja kiinnostavia sinänsä. Esimerkit perustuivat pääosin realistisiin skenaarioihin, joten monet niistä voivat toimia pohjana tosielämän sovellusten rakentamiselle.

Win32/Win64 API tai yleisesti Windows API tukee Microsoftin 32- ja 64-bittisten käyttöjärjestelmien perhettä, joka sisältää tällä hetkellä Windows XP:n, Windows 2000:n ja Windows Server 2003:n. Tämän perheen varhaisia ​​jäseniä ovat Windows NT käyttöjärjestelmät , Windows Me, Windows 98 ja Windows 95; Näitä järjestelmiä pidetään nyt vanhentuneina, mutta monet kirjan esimerkkiohjelmat voidaan ajaa niiden hallinnassa. Tarvittaessa keskustellaan siirtymisestä Win32-alustasta kehittyvään Win64-alustaan. Win64, jota tuetaan 64-bittisenä käyttöliittymänä joissakin Windows Server 2003:n ja Windows XP:n versioissa, on lähes identtinen Win32:n kanssa.

Ei ole epäilystäkään siitä, että Windows API on tärkein tekijä, joka vaikuttaa koko sovelluskehitysprosessiin ja monissa tapauksissa korvaa UNIX- ja Linux-käyttöjärjestelmien tukeman POSIX API:n, koska sitä pidetään parempana tai ainakin tarjoaa samat ominaisuudet. työpöytä- ja palvelinjärjestelmiin suuntautuneille sovelluksille. Siksi monet kokeneet ohjelmoijat ovat kiinnostuneita opettelemaan Windows API:n mahdollisimman nopeasti, ja tämä kirja on suunniteltu helpottamaan tätä.

Ensinnäkin meidän on kerrottava sinulle, mikä Windows API on, ja näytettävä, kuinka sitä käytetään tosielämän tilanteissa, pitäen tämä tarina mahdollisimman lyhyenä eikä ylikuormitettu tarpeettomilla yksityiskohdilla. Siksi tätä kirjaa ei ole tarkoitettu käytettäväksi viiteoppaana, vaan esittelemään tärkeimpien funktioiden perusominaisuudet ja osoittamaan, kuinka niitä voidaan käyttää käytännön ohjelmointitilanteissa. Tämän tiedon avulla lukija voi käyttää Microsoftin tarjoamaa laajaa ohjedokumentaatiota tutkiakseen itsenäisesti tiettyjä aiheita, lisäominaisuuksia ja vähemmän ilmeisiä ominaisuuksia tarpeidensa tai kiinnostuksen kohteidensa perusteella. Henkilökohtaisesti tällä lähestymistavalla Windows API:n oppiminen oli minulle helppoa ja Windows-ohjelmien kehittäminen oli suuri ilo, vaikka epämiellyttäviäkin hetkiä oli. Innostukseni ovat paikoin helposti nähtävissä kirjassa, mikä ei itse asiassa ole yllättävää. Tämä ei kuitenkaan suinkaan tarkoita sitä, että olisin ehdoitta samaa mieltä Windows API:n paremmuudesta muiden käyttöjärjestelmien (OS) API:ihin nähden, mutta on epätodennäköistä, että kukaan vastustaa sitä, että sillä on paljon positiivisia ominaisuuksia.

Monissa Windows-kirjoissa kuluu paljon aikaa selittääkseen, mitä prosessit, virtuaalimuisti, prosessien välinen viestintä ja ennaltaehkäisevä ajoitus ovat, mutta ne eivät osoita, kuinka näitä asioita käytetään tosielämän tilanteissa. Ohjelmoijat, joilla on kokemusta UNIXin, Linuxin, IBM MVS:n, Open VMS:n ja joidenkin muiden käyttöjärjestelmien kanssa työskentelystä, ovat jo tuttuja näistä käsitteistä, ja heitä kiinnostaa vain siirtyä opiskelemaan näiden ominaisuuksien käyttöönottoa Windowsissa mahdollisimman nopeasti. Lisäksi useimmat Windows-kirjat keskittyvät voimakkaasti käyttöliittymäpohjaisiin ohjelmointitekniikoihin. Jotta voimme keskittyä vain järjestelmän tarjoamiin tärkeimpiin perusominaisuuksiin, tässä kirjassa ei käsitellä käyttöliittymän aihetta, ja rajoitamme keskustelemaan vain yksinkertaisesta konsolin merkkien syötöstä/tulosta.

Tässä kirjassa omaksutun näkökulman mukaan Windows on vain käyttöjärjestelmän API, joka tarjoaa joukon täysin ymmärrettäviä työkaluja. Monet ohjelmoijat kokemuksestaan ​​riippumatta kokevat tarpeen nopeuttaa Windowsin oppimista, ja ilman Windows-tietoa on mahdotonta keskustella sellaisista aiheista kuin Microsoftin kehittämä Component Object Model (COM). Joissakin suhteissa Windows-järjestelmät ovat muita järjestelmiä parempia, toisissa ne ovat jäljessä tai ovat suunnilleen samanlaisia. Tämän kirjan tavoitteena on osoittaa, kuinka näitä ominaisuuksia voidaan parhaiten hyödyntää todellisissa tilanteissa hyödyllisten, laadukkaiden ja suorituskykyisten sovellusten kehittämiseksi.

Potentiaalinen yleisö

Kaikki, jotka haluavat nopeasti oppia kehittämään sovelluksia, taitotasosta riippumatta.

Ohjelmoijat ja ohjelmistokehityksen ammattilaiset, joiden tehtävänä on siirtää olemassa olevia sovelluksia, erityisesti UNIXille kirjoitettuja, mihin tahansa Windows-alustaan. Kirja vertailee Windowsin, UNIXin ja C-standardin kirjaston käyttöön liittyviä ominaisuuksia ja ohjelmointimalleja. Kaikki yleiset UNIX-toiminnot, mukaan lukien prosessinhallinta, synkronointi, tiedostojärjestelmät ja prosessien välinen viestintä, käsitellään Windows-termeillä.

Lukijat, jotka alkavat kehittää uusia projekteja, joiden toimintaa ei rajoita tarve siirtää olemassa olevia ohjelmakoodeja muille alustoille. Kirja kattaa monia ohjelmien suunnittelun ja toteutuksen näkökohtia ja osoittaa, kuinka Windowsin ominaisuuksia käytetään hyödyllisten sovellusten luomiseen ja yleisten ohjelmointiongelmien ratkaisemiseen.

COM:ia ja .NET Frameworkia käyttävät ohjelmoijat löytävät täältä paljon hyödyllistä tietoa, joka helpottaa dynaamisten linkkikirjastojen (DLL) periaatteiden, säikeen mallien ja niiden käytön, rajapintojen ja synkronoinnin tutkimista.

Opiskelijat, jotka opiskelevat ylioppilasvuosinaan tietojenkäsittelytiedettä tai tekevät opinnäytetyötään järjestelmäohjelmointiin tai sovelluskehitykseen liittyen. Kirja on hyödyllinen myös niille, jotka opiskelevat monisäikeistä ohjelmointia tai joutuvat luomaan verkkosovelluksia. Sitä voidaan käyttää myös hyödyllisenä täydennyksenä lähteille, kuten W. Richard Stevensin kirjalle Kehittynyt ohjelmointi UNIX-ympäristössä(katso bibliografia), jonka avulla opiskelijat voivat vertailla Windowsin ja UNIXin ominaisuuksia. Tämä kirja on suureksi avuksi myös käyttöjärjestelmäkurssia suorittaville opiskelijoille, koska se näyttää tarkalleen, kuinka kaupallisesti kiinnostavien käyttöjärjestelmien perustoiminnot tarjotaan.

Ainoa oletus, joka sisältyy kaikkeen yllä olevaan, on oletus, että lukijoilla on C-ohjelmointikokemus.

Muutoksia kolmannessa painoksessa

Kahden ensimmäisen painoksen merkittävien päivitysten ja uudelleenjärjestelyjen ohella kolmas painos lisää runsaasti uutta materiaalia. Tämä julkaisu on tarkoitettu ratkaisemaan seuraavat ongelmat:

Kattaa Windows XP:ssä, Windows 2000:ssa ja Windows Server 2003:ssa käyttöön otetut uudet ominaisuudet ja harkitse siirtymistä Win64-alustalle.

Sulje pois materiaali, joka ottaa huomioon Windows 95:n, Windows 98:n ja Windows ME:n ("Windows 9x" -perhe) erityispiirteet vanhentuneena, koska Windows XP on asennettu tällä hetkellä toimitettaviin henkilökohtaisiin järjestelmiin ja Windows 9x:n rajoitukset ovat jo menettäneet merkityksensä. merkityksellisyys. Esimerkkiohjelmat käyttävät ilman minkäänlaista pätevyyttä ominaisuuksia, jotka sisältyvät vain nykyisiin Windows-versioihin, vaikka sen seurauksena jotkin ohjelmat eivät toimi Windows 9x:ssä.

Tarjoa kattavampi ketjuttaminen ja synkronointi, mukaan lukien niihin liittyvät suorituskyky-, skaalautuvuus- ja luotettavuusnäkökohdat. Luku 9 sekä jotkin luvun 10 esimerkit ovat uusia.

Korosta Windows 2000:n ja Windows Server 2003:n ja niiden uusien ominaisuuksien kasvavaa vaikutusta tehokkaiden, skaalautuvien, monisäikeisten palvelinsovellusten ominaisuuksiin.

Selvitä ohjelmien suorituskyvyn riippuvuus niiden rakentamisen periaatteista kiinnittäen erityistä huomiota monisäikeisiin ohjelmiin, joissa on synkronointi, sekä näiden ohjelmien käytön ominaisuudet symmetristen moniprosessorijärjestelmien (SMP) olosuhteissa.

Ota huomioon lukijoiden ja opiskelijoiden kommentit puutteiden korjaamisesta ja esitystavan parantamisesta sekä kaikki heidän neuvonsa ja toiveensa, niin tärkeät kuin merkityksettömätkin.

Miten tämä kirja on järjestetty?

Luvut on järjestetty ajankohtaisen painopisteensä mukaan, joten ensin käsitellään puhtaasti yksisäikeisten sovellusten suorittamiseen tarvittavat työkalut, sitten prosessien ja säikeiden hallintaan käytettävät työkalut, ennen kuin keskustellaan verkko-ohjelmoinnista monisäikeisessä ympäristössä. Tämän kirjan järjestelyn ansiosta lukijan on helppo seurata esityksen logiikkaa siirtymällä peräkkäin tiedostojärjestelmistä muistinhallintaan ja tiedostojen kartoitukseen, sitten prosesseihin, säikeisiin ja synkronointiin ja sitten prosessien väliseen ja verkkoviestinnän ja sovellusten tietoturvaongelmia. Tämä organisaatio mahdollistaa myös esimerkkien rakentamisen luonnollisesti, kun niistä tulee monimutkaisempia, aivan kuten kehittäjä rakentaisi ensin yksinkertaisen prototyypin ja lisää sitten vähitellen lisäominaisuuksia. Edistyneiden asioiden, kuten asynkronisen I/O:n ja tietoturvaongelmien käsittely on siirretty aivan kirjan loppuun.

Jokaisessa luvussa käsitellään lyhyesti tiettyjä toimintoja, kuten prosessien hallintaa tai tiedostojen näyttöä, tärkeimmät asiaankuuluvat Windowsin ominaisuudet ja niiden välinen yhteys käsitellään yksityiskohtaisesti. Esitykseen liittyy havainnollistavia esimerkkejä. Vain tärkeimmät osat ohjelmaluetteloista sisältyvät päätekstiin; ohjelmien täydelliset tekstit sekä tarvittavat sisällystiedostot, aputoiminnot ja muut koodit ovat liitteessä A tai saatavilla kirjan web-sivustolla (http://www.awprofessional.com/titles/0321256190). Kaikissa tapauksissa, joissa ominaisuuksia tukevat vain nykyiset Windows-versiot (XP, 2000 ja Server 2003) eivätkä aiemmat versiot, kuten Windows 9x ja Windows NT, jotka eivät sisällä monia lisäominaisuuksia, erillinen vastuuvapauslauseke. tehty. Jokaisessa luvussa on luettelo lisäsuosituksista ja useita harjoituksia. Monet harjoitukset keskittyvät asioihin, jotka ovat tärkeitä ja kiinnostavia, mutta joita ei käsitelty päätekstissä, kun taas toiset harjoitukset pakottavat lukijan syventymään monimutkaisempiin tai erikoistuneempiin aiheisiin.

Luku 1 tarjoaa korkean tason johdannon Windows-käyttöjärjestelmäperheeseen ja Windows API:hen. Tämä yksinkertainen esimerkkiohjelma esittelee Windows-ohjelmointityylin peruselementit ja tarjoaa perustan edistyneiden Windowsin ominaisuuksien käyttöönotolle. Win64- ja useiden alustojen ohjelmistojen siirtoongelmia esitellään luvussa 1, tarkastellaan tarkemmin luvussa 16, ja niitä käsitellään tarvittaessa koko kirjan loppuosassa.

Luvut 2 ja 3 kattavat tiedostojärjestelmät, konsolin I/O:n, tiedostojen lukituksen ja hakemistojen hallinnan. Luvussa 2 esitellään myös Unicode, Windowsissa käytetty laajennettu merkistö. Vastaavat havainnolliset esimerkit kattavat peräkkäisen ja suoran pääsyn tiedostoon sisältyviin tietoihin, hakemistopuun läpikäynnin ja tiedostojen arkistoinnin. Luku 3 päättyy keskusteluun ohjelmallisesta rekisterihallinnasta, jolla on paljon yhteistä tiedostojen ja hakemistojen hallinnan kanssa.

Luku 4 esittelee lukijan Windowsin poikkeusten käsittelyyn, mukaan lukien Structured Exception Handling (SEH), jota käytetään laajasti koko kirjan ajan. Monissa kirjoissa SEH:n tutkiminen on lykkääntynyt viimeisiin lukuihin, mutta tutustuttuamme tähän työkaluun jo alkuvaiheessa voimme käyttää sitä välittömästi, mikä yksinkertaistaa meille huomattavasti joitain ohjelmointitehtäviä ja parantaa ohjelmiemme laatua. Lisäksi siinä kuvataan myös yksi uusimmista ominaisuuksista - vektoroitu poikkeusten käsittely.

Luku 5 tarkastelee muistin hallintaa Windowsissa ja näyttää, kuinka tiedostokartoitusta käytetään ohjelmoinnin yksinkertaistamisen lisäksi myös ohjelman suorituskyvyn parantamiseen. Tässä luvussa käsitellään myös DLL-tiedostojen järjestämistä.

Luku 6 sisältää johdannon prosesseihin, prosessien hallintaan ja yksinkertaisiin synkronointitekniikoihin Windowsissa. Myöhemmin luvussa 7 näitä käsitteitä käytetään kuvaamaan virtauksen ohjausta. Kunkin luvun esimerkit havainnollistavat monia etuja, mukaan lukien ohjelman yksinkertaistaminen ja suorituskyvyn parannukset, joita säikeiden ja prosessien käyttäminen tuo.

Luvut 8, 9 ja 10 tarjoavat syvällisen katsauksen yhteen Windowsin tehokkaimmista ominaisuuksista: säikeiden synkronoinnista. Synkronointi on monimutkainen aihe, ja sellaisenaan nämä luvut sisältävät lukuisia esimerkkejä ja kuvauksia selkeistä malleista, joiden pitäisi auttaa lukijaa hyödyntämään säikeitä täysimääräisesti ohjelmoinnin tehokkuuden ja ohjelman suorituskyvyn parantamiseksi välttäen samalla monia sudenkuoppia. Nämä luvut sisältävät uutta materiaalia, joka kattaa suorituskyky- ja skaalautuvuuskysymykset, jotka ovat erityisen tärkeitä palvelinsovelluksia rakennettaessa, mukaan lukien SMP-järjestelmissä käytettävät sovellukset.

Luvut 11 ja 12 käsittelevät prosessien ja säikeiden välistä viestintää sekä verkkoohjelmointia. Luku 11 keskittyy Windowsin ominaisuuksiin, nimittäin anonyymeihin putkiin, nimettyihin putkiin ja postilaatikoihin. Luvussa 12 käsitellään Windows Sockets -sovelluksia, jotka mahdollistavat yhteydenpidon muiden kuin Windows-järjestelmien kanssa käyttämällä vakioprotokollia, pääasiassa TCP/IP:tä. Vaikka Windows Sockets ei ole varsinaisesti osa Windows API:ta, se pystyy tarjoamaan viestintää ja vuorovaikutusta verkkojen ja Internetin välillä, joten tämän luvun aihe on yhdenmukainen kirjan muun osan kanssa. Havainnollistamme monisäikeisen asiakas-palvelinjärjestelmän esimerkkiä, kuinka prosessien välinen viestintä voidaan tarjota säikeiden kanssa.

Luku 13 näyttää, kuinka Windowsin avulla voit muuttaa luvuissa 11 ja 12 luodut palvelinsovellukset Windows-palveluiksi, joita voit hallita taustapalvelimina. Palvelimen muuntaminen palveluksi vaatii vain pieniä muutoksia ohjelmaan.

Luku 14 näyttää, kuinka suorittaa asynkronisia I/O-toimintoja käyttämällä päällekkäisiä I/O- ja valmistumistapahtumia ja -rutiineja. Samat tulokset voidaan saavuttaa säikeillä, joten esimerkkejä tarjotaan vertaillakseen erilaisia ​​ratkaisuja vastaavien ohjelmien yksinkertaisuuden ja suorituskyvyn suhteen. Samaan aikaan skaalautuvien palvelimien luominen monisäikeisellä tuella edellyttää valmiiden porttien käyttöä, joiden käyttöä havainnollistaa aiemmissa luvuissa luotujen palvelimien esimerkki. Myös odotusajastimet on kuvattu, joiden tarkastelu edellyttää aiemmin tässä luvussa esiteltyjen käsitteiden käyttöä.

Luku 15 keskittyy Windows-objektien suojaukseen ja käyttää esimerkkiä UNIX-tyyppisen tiedostoturvajärjestelmän emuloinnista, joka vaatii asianmukaiset oikeudet tiettyjen toimintojen suorittamiseen tiedostolle. Lisäesimerkit havainnollistavat, kuinka prosessit, kierteet ja nimetyt putket suojataan. Suojauslisäyksiä voidaan sitten lisätä aiemmin käsiteltyihin esimerkkeihin.

Luku 16 päättää perusmateriaalin keskusteluun Win64:n ohjelmoinnista sekä ohjelmistojen yhteensopivuuden varmistamisesta tämän alustan kanssa. Tämän jälkeen yksi aiemmin käsitellyistä esimerkeistä muunnetaan muotoon, joka mahdollistaa ohjelman siirtämisen Win64-alustalle.

Kirjan päämateriaalia täydentää kolme liitettä. Liite A sisältää kuvaukset kirjan verkkosivuilla olevista ohjelmista ja suosituksia niiden käyttöön. Liite B sisältää useita taulukoita, joissa verrataan Windowsin ominaisuuksia vastaaviin UNIXin ja C-standardin kirjaston tarjoamiin ominaisuuksiin. Liite C vertaa joidenkin päätekstissä annettujen esimerkkien vaihtoehtoisten toteutusten suorituskykyä, jolloin lukija voi muotoilla oman käsityksensä. Windows-työkalujen, sekä perus- että edistyneiden, sekä C-kirjaston tarjoamien työkalujen suhteelliset edut ja puutteet.

Yhdistäminen UNIXiin ja C-kirjastoon

Aineistoa esitettäessä vertaamme UNIXin (Linux) ja ANSI C -standardin kirjastoon sisältyvien Windows-työkalujen ja vastaavien työkalujen tyyliä ja toiminnallisia ominaisuuksia. Pidimme asianmukaisena sisällyttää nämä tiedot, koska monet lukijat tuntevat UNIXin, ja näiden kahden järjestelmän välinen vertailu kiinnostaa epäilemättä heitä. Ne, jotka eivät tunne UNIX-järjestelmää, voivat turvallisesti ohittaa asiaankuuluvat osat, jotka on kirjoitettu pienellä fontilla ja sisennetty, jotta ne olisi helpompi erottaa.

Esimerkkien tulisi sisältää esimerkkejä Windowsin ominaisuuksien yleisistä, yleisimmistä ja käytännössä hyödyllisistä käyttötavoista.

Niiden tulee vastata ohjelmistokehityksessä, konsultoinnissa ja koulutuksessa kohdattuja tosielämän ohjelmointitilanteita. Jotkut asiakkaistani ja opiskelijoistani ovat käyttäneet esimerkkikoodeja omien järjestelmiensä rakentamiseen. Neuvontaa tehdessäni törmään usein tämän kirjan kaltaisiin ohjelmakoodeihin, ja useissa tapauksissa minua on jopa pyydetty koodeilla, jotka on otettu suoraan ensimmäisestä tai toisesta painoksesta. (Voit muuten käyttää työssäsi myös esimerkkejä kirjasta, ja jos liität dokumentaatioon myös kiitososoitteen minulle, niin olen vain iloinen.) Olen usein törmännyt näihin koodeihin erillisinä COM- tai C++-objektien osia. Esimerkit, ottaen huomioon niiden valmistusajan rajoitukset ja sallitun koodimäärän, ovat lähellä "todellista elämää" ja ratkaisevat "oikeita" ongelmia.

Esimerkeissä tulee korostaa ominaisuuksien todellista käyttäytymistä ja vuorovaikutusta, jotka eivät aina ole sitä, mitä dokumentaatiota lukiessa voi odottaa. Tässä kirjassa sekä teksti että esimerkit eivät keskity itse toimintoihin, vaan siihen, miten ne ovat vuorovaikutuksessa keskenään.

Esimerkkikoodit tulee rakentaa periaatteelle rakentaa ja laajentaa asteittain lisäämään uusia toimintoja aiempaan ratkaisuun yksinkertaisella ja ymmärrettävällä tavalla sekä esitellä vaihtoehtoisia toteutustekniikoita.

Monet ensimmäisten lukujen esimerkeistä toteuttavat UNIX-komentoja, kuten ls, touch, chmod ja sort, jolloin Windows-ominaisuudet esitellään kontekstissa, joka on tuttu joillekin lukijoille, samalla kun luodaan hyödyllisiä aputoimintoja. Lisäksi saman komennon eri toteutukset helpottavat Windowsin parannuksilla saavutettujen suorituskykyhyötyjen arvioimista. Vastaavat testitulokset on esitetty liitteessä B.

Kirjan alussa annetut esimerkit eroavat yleensä ohjelmien lyhyestä pituudesta, mutta kun materiaali monimutkaistuu seuraavissa luvuissa, havainnollistavan ohjelmakoodin koko kasvaa tarvittaessa merkittävästi.

Jokaisen luvun lopussa olevat harjoitukset haastavat lukijan kehittämään vaihtoehtoisia ratkaisuja, tutkimaan suositeltuja aiheita yksinään tai tutkimaan lisätoimintoja, joita ei voida käsitellä yksityiskohtaisesti tässä kirjassa, vaikka se kiinnostaakin. Jotkut harjoituksista ovat melko yksinkertaisia, kun taas toiset voivat olla sinulle vaikeita. Usein myös selkeästi epäonnistuneet ratkaisut tuodaan tietoosi, sillä virheiden tunnistaminen ja poistaminen tarjoaa erinomaiset mahdollisuudet hioa osaamistasi.

Kaikki esimerkit on testattu ja testattu Windows XP-, Windows 2000- ja Windows Server 2003 -käyttöjärjestelmissä – Tarvittaessa testattiin Windows 9x- ja Windows NT -käyttöjärjestelmissä. Ja vaikka Intel-prosessoreihin perustuvia yhden prosessorin järjestelmiä käytettiin pääasiassa ohjelmien kehittämiseen, useimpia ohjelmia testattiin myös moniprosessorijärjestelmissä. Testattaessa sovelluksia asiakas-palvelin-arkkitehtuurilla käytettiin useita asiakkaita samanaikaisesti vuorovaikutuksessa palvelimen kanssa. Koskaan ei kuitenkaan voi väittää täydellisellä varmuudella, että ohjelmat ovat oikeita tai täydellisiä ja että ne soveltuvat johonkin tiettyyn tarkoitukseen. Tietysti yksinkertaisimmissakin esimerkeissä voi olla puutteita ja tietyissä olosuhteissa ne eivät toimi ollenkaan - tällainen on melkein minkä tahansa ohjelmiston kohtalo. Siksi kirjoittaja on vilpittömästi kiitollinen kaikille, jotka lähettävät viestejä ohjelmissa löydetyistä vioista ja mikä vielä parempi - virheistä.

Tälle kirjalle omistetut verkkosivustot

Kirjan web-sivustolla (http://www.awprofessional.com/titles/0321256190) on ladattava tiedosto, joka sisältää kaikki ohjelmakoodit ja projektit kaikille kirjassa annetuille esimerkeille, ratkaisut useisiin harjoituksiin, joidenkin esimerkkien vaihtoehtoiset toteutukset, ohjeet sekä suorituskyvyn vertailutulokset. Näitä tietoja päivitetään säännöllisesti tarpeen mukaan uuden materiaalin lisäämiseksi ja tarvittavien korjausten tekemiseksi.

Henkilökohtaiselta verkkosivustoltani (http://www.world.std.com/~jmhart/windows.htm) löydät luettelon kirjasta löytyneistä virheistä sekä muita esimerkkejä, lukijoiden kirjeitä ja lisäselityksiä , monien muiden asioiden joukossa. Mukana on myös PowerPoint-dioja, joita voidaan käyttää ei-kaupallisiin koulutustarkoituksiin. Näitä dioja ovat jo käyttäneet opiskelijat monilla ammattikursseilla, mutta ne soveltuvat hyvin myös korkeakouluihin.

Kun puutteita ja virheitä havaitaan ja lukijapalautetta saadaan, tätä materiaalia päivitetään säännöllisesti. Jos kohtaat vaikeuksia työskennellessään kirjan sisältämien ohjelmien tai minkä tahansa muun materiaalin kanssa, vieraile ensin mainituilla sivustoilla, joista voit ehkä löytää tarvittavat selitykset tai saada tietoa tähän mennessä havaituista virheistä. Jos tällainen yritys saada vastausta kysymykseesi epäonnistuu, ota minuun suoraan yhteyttä seuraavaan sähköpostiosoitteeseen: [sähköposti suojattu].

Kiitokset

Kolmannen painoksen valmistelun aikana monet ihmiset auttoivat minua tehokkaasti, jakoivat neuvoja tai vain tukivat ystävällisillä sanoilla, ja lukijat ehdottivat arvokkaita ideoita ja kommentteja. Kirjoittajan verkkosivut kiittävät lämpimästi kaikkia niitä, joiden neuvot ja kommentit heijastuivat kirjan kolmanteen painokseen, kun taas kahdessa ensimmäisessä painoksessa on kiitos niille, jotka antoivat meille arvokkaita neuvoja jo aikaisemmin. Lisäksi erinomaisen yksityiskohtaisen analyysin kirjan sisällöstä ovat antaneet tätä teosta käsitelleiden Vagif Abilovin, Bill Draperin, Horst D. Clausenin, Michael Davidsonin, Daniel Jiangin, Eric Landesin, Klaus H. Probstin ja Douglas Reillyn viimeaikaisissa arvosteluissa. paljon enemmän huomiota kuin muodolliset tehtävät yksinään olisivat vaatineet; Heidän neuvonsa ja suosituksensa ansaitsevat syvimmän kiitoksen, ja voin vain toivoa, että kiinnitin yhtä paljon huomiota heidän työnsä tuloksiin. Ystäväni ArrAy Inc:ssä ansaitsevat erityisen kiitoksen; Opin heiltä paljon.

Anne H. Smith, joka teki taiton, toi taitonsa, sinnikkyytensä ja kärsivällisyytensä käyttöön kirjan valmistelussa julkaisua varten; Ilman hänen panosta kirjan julkaiseminen olisi ollut yksinkertaisesti mahdotonta. Elissa Armor, joka valmisteli asettelut kahdelle ensimmäiselle painokselle, loi pohjan tälle painokselle tehden siirtymisestä mahdollisimman sujuvaa.

Chrysta Meadowbrooke, käsikirjoituksen toimittaja, paransi huomattavasti materiaalin tarkkuutta, selkeyttä ja yhtenäisyyttä. Hänen huolellinen huomionsa kirjan sisältöön, tarkat kysymykset ja oivalluksensa auttoivat valaisemaan monia kysymyksiä syvällisemmin.

Addison-Wesley Professionalin henkilökunta oli niin ammattitaitoista ja asiantuntevaa, että oli ilo työskennellä heidän kanssaan. Päätoimittaja Stephanie Nakib ja päätoimittaja Karen Gettman työskentelivät projektin parissa alusta alkaen, työnsivät minua tarvittaessa, selvittivät häiriötekijöitä ja varmistivat, etten poikennut yhtään työaikataulusta. Apulaistoimittaja Ebony Haight antoi yleisen ohjauksen koko prosessin ajan, ja John Fullerin ja Patrick Cash-Petersonin tuotantotiimi, tuotantokoordinaattori, sai vaikutelman siltä, ​​että tuotantoprosessia ei voitu käsitellä ilman komplikaatioita.

Tämä kirja on omistettu rakkaille Bobille ja Elizabethille.

Johnson (John) M. Hart (Johnson (John) M. Hart) [sähköposti suojattu] Elokuu 2004.

Kustantajalta

Sinä, tämän kirjan lukija, olet sen tärkein kriitikko ja kommentoija. Arvostamme mielipidettäsi ja haluamme tietää, mitä teimme oikein, mitä olisimme voineet tehdä paremmin ja mitä muuta haluaisit meidän julkaisevan. Olemme kiinnostuneita kuulemaan muita kommentteja, jotka haluat antaa meille.

Odotamme kommenttejasi ja toivomme niitä. Voit lähettää meille kirjeen tai sähköpostin tai vierailla Web-palvelimellamme ja jättää kommenttisi sinne. Sanalla sanoen, millä tahansa sinulle sopivalla tavalla, kerro meille, pidätkö tästä kirjasta vai et, ja kerro myös mielipiteesi siitä, kuinka tehdä kirjoistamme kiinnostavampia sinulle.

Kun lähetät kirjeen tai viestin, muista liittää mukaan kirjan nimi ja sen tekijät sekä palautusosoitteesi. Käsittelemme mielipiteesi huolellisesti ja otamme sen huomioon valitessasi ja valmistautuessamme tulevien kirjojen julkaisemiseen.

Meidän koordinaatit:

Sähköposti: [sähköposti suojattu]

WWW: http://www.williamspublishing.com

Tietoja kirjeistä: Venäjä: 115419, Moskova, PL 783 Ukraina: 03150, Kiova, PL 152