|
Programowanie w systemie Windows. Wydanie IV Autor: Johnson M. Hart Data wydania: 2010/10 Stron: 752 Tytuł oryginału: Windows System Programming (4th Edition) Tłumaczenie: Tomasz Walczak ISBN: 978-83-[zasłonięte]-2780-6 Format: 168x237 Oprawa: miękka Numer z katalogu: 5720 ftp://ftp.helion.pl/przyklady/prowi4.zip Wydawnictwo Helion
Wykorzystaj paralelizm i maksymalizuj wydajność w systemach wielordzeniowych Zapewnij przenośność między środowiskami 64- i 32-bitowymi Popraw skalowalność za pomocą wątków, pul wątków i mechanizmu IOCP
Wybierając system Windows jako docelową platformę rozwijanych aplikacji, programiści na całym świecie sugerują się najczęściej jego dużą funkcjonalnością i wymogami biznesowymi. System ten jest bowiem zgodny z wieloma kluczowymi standardami. Obsługuje między innymi biblioteki standardowe języków C i C+ oraz uwzględnia wiele otwartych standardów współdziałania. Dlatego gniazda systemu Windows są standardowym interfejsem programowania rozwiązań sieciowych z dostępem do TCP/IP i innych protokołów sieciowych. W dodatku każda nowa wersja tego systemu jest coraz bardziej zintegrowana z dodatkowymi technologiami z obszaru multimediów, sieci bezprzewodowych, usług Web Service, platformy .NET i usługi plug-and-play. Niewątpliwym atutem Windows jest także zawsze uważany za stabilny, a jednak ciągle wzbogacany o ważne dodatki interfejs API.
Jeśli zatem szukasz kompletnego, rzetelnego i aktualnego podręcznika do nauki programowania za pomocą interfejsu Windows API, właśnie go znalazłeś! Książka ta w praktyczny sposób przedstawia wszystkie mechanizmy systemu Windows potrzebne programistom, pokazując, w jaki sposób działają funkcje tego systemu i jak wchodzą w interakcje z aplikacjami. Skoncentrowano się tu na podstawowych usługach systemu, w tym na systemie plików, zarządzaniu procesami i wątkami, komunikacji między procesami, programowaniu sieciowym i synchronizacji. Autor tej książki nie zamierza jednak obciążać Cię zbędną teorią i nieistotnymi szczegółami. Podaje Ci wiedzę opartą na prawdziwych przykładach, dzięki czemu szybko i sprawnie opanujesz poruszane tu zagadnienia. Wiadomości, które tu znajdziesz, pozwolą Ci zrozumieć interfejs Windows API w takim stopniu, byś zdobył solidne podstawy do rozwijania programów na platformę .NET Microsoftu.
W książce znajdziesz omówienie między innymi takich kwestii, jak:
wprowadzenie do rodziny systemów operacyjnych Windows wykorzystanie paralelizmu i maksymalizowanie wydajności w systemach wielordzeniowych używanie 64-bitowej przestrzeni adresowej oraz zapewnianie przenośności między środowiskami 64- i 32-bitowymi zagadnienia związane z systemami plików, operacjami wejścia-wyjścia w konsoli, blokowaniem dostępu do plików i zarządzaniem katalogami wprowadzenie do obsługi wyjątków w systemie Windows, w tym do mechanizmu SEH zarządzanie i synchronizacja procesów systemu Windows zarządzanie pamięcią i biblioteki DLL szczegółowe omówienie synchronizacji wątków systemu Windows, pul wątków i wydajności przekształcanie aplikacji serwerowych na usługi systemu Windows zapewnianie przenośności kodu źródłowego oraz współdziałania aplikacji z systemów Windows, Linux i UNIX zabezpieczanie obiektów w systemie Windows poprawiające wydajność funkcje interfejsu Windows API — blokady SRW i zmienne warunkowe
Oto kompletny, aktualny przewodnik po programowaniu przy użyciu interfejsu Windows API!
Spis treści:
Rysunki (13) Tabele (15) Listingi (17) Przebiegi programów (21) Wstęp (23) O autorze (33) Rozdział 1. Wprowadzenie do systemu Windows (35)
Podstawy systemów operacyjnych (36) Ewolucja systemu Windows (37) Wersje systemu Windows (37) Pozycja systemu Windows na rynku (40) System Windows, standardy i systemy o otwartym dostępie do kodu źródłowego (41) Podstawy systemu Windows (43) Przenośność 32- i 64-bitowego kodu źródłowego (46) Biblioteka standardowa języka C - kiedy korzystać z niej do przetwarzania plików? (47) Co jest potrzebne do korzystania z tej książki? (48) Przykład - proste sekwencyjne kopiowanie pliku (50) Podsumowanie (58) Ćwiczenia (61)
Rozdział 2. Korzystanie z systemu plików i znakowych operacji wejścia-wyjścia w systemie Windows (63)
Systemy plików w systemie Windows (64) Reguły tworzenia nazw plików (65) Otwieranie, wczytywanie, zapisywanie i zamykanie plików (66) Przerywnik - Unicode i znaki ogólne (74) Strategie związane z kodowaniem Unicode (77) Przykład - przetwarzanie błędów (78) Urządzenia standardowe (81) Przykład - kopiowanie wielu plików do standardowego wyjścia (82) Przykład - proste szyfrowanie pliku (85) Zarządzanie plikami i katalogami (88) Operacje wejścia-wyjścia konsoli (94) Przykład - wyświetlanie danych i instrukcji (96) Przykład - wyświetlanie bieżącego katalogu (99) Podsumowanie (100) Ćwiczenia (101)
Rozdział 3. Zaawansowane przetwarzanie plików i katalogów oraz rejestr (103)
64-bitowy system plików (104) Wskaźniki do plików (104) Pobieranie rozmiaru plików (109) Przykład - bezpośrednie aktualizowanie rekordów (111) Atrybuty plików i przetwarzanie katalogów (115) Przykład - wyświetlanie atrybutów plików (121) Przykład - ustawianie znaczników czasu dla plików (125) Strategie przetwarzania plików (126) Blokowanie dostępu do plików (128) Rejestr (134) Zarządzanie rejestrem (137) Przykład - wyświetlanie kluczy i zawartości rejestru (141) Podsumowanie (145) Ćwiczenia (146)
Rozdział 4. Obsługa wyjątków (149)
Wyjątki i procedury do ich obsługi (150) Wyjątki zmiennoprzecinkowe (157) Błędy i wyjątki (159) Przykład - traktowanie błędów jak wyjątków (161) Procedury obsługi zakończenia (163) Przykład - stosowanie procedur obsługi zakończenia do poprawy jakości programów (167) Przykład - stosowanie funkcji filtrującej (170) Procedury sterujące konsoli (175) Przykład - procedura sterująca konsoli (176) Wektorowa obsługa wyjątków (178) Podsumowanie (180) Ćwiczenia (181)
Rozdział 5. Zarządzanie pamięcią, pliki odwzorowane w pamięci i biblioteki DLL (183)
Architektura zarządzania pamięcią w systemie Windows (184) Sterty (187) Zarządzanie pamięcią na stercie (191) Przykład - sortowanie plików za pomocą binarnego drzewa wyszukiwań (198) Pliki odwzorowane w pamięci (203) Przykład - sekwencyjne przetwarzanie pliku za pomocą plików odwzorowanych (212) Przykład - sortowanie pliku odwzorowanego w pamięci (215) Przykład - stosowanie wskaźników z bazą (218) Biblioteki DLL (224) Przykład - dołączanie w czasie wykonywania programu funkcji do konwersji plików (231) Punkt wejścia do biblioteki DLL (232) Zarządzanie wersjami bibliotek DLL (234) Podsumowanie (236) Ćwiczenia (237)
Rozdział 6. Zarządzanie procesem (241)
Procesy i wątki w systemie Windows (241) Tworzenie procesu (244) Dane identyfikacyjne procesów (251) Powielanie uchwytów (252) Wychodzenie z procesu i kończenie jego działania (254) Oczekiwanie na zakończenie działania procesu (256) Bloki i łańcuchy znaków środowiska (258) Przykład - równoległe wyszukiwanie wzorca (260) Procesy w środowisku wieloprocesorowym (264) Czas wykonywania procesu (265) Przykład - czas wykonywania procesu (265) Generowanie zdarzeń sterujących konsoli (267) Przykład - proste zarządzanie zadaniem (268) Przykład - korzystanie z obiektów zadań (279) Podsumowanie (283) Ćwiczenia (284)
Rozdział 7. Wątki i szeregowanie (287)
Wprowadzenie do wątków (287) Podstawowe informacje o wątkach (290) Zarządzanie wątkami (291) Stosowanie biblioteki języka C w wątkach (296) Przykład - wielowątkowe wyszukiwanie wzorca (298) Wpływ na wydajność (301) Wątki główne i robocze oraz inne modele działania wątków (303) Przykład - sortowanie przez scalanie z wykorzystaniem wielu procesorów (304) Wprowadzenie do paralelizmu w programach (311) Pamięć TLS (312) Priorytety oraz szeregowanie procesów i wątków (314) Stany wątków (317) Pułapki i często popełniane błędy (319) Oczekiwanie z pomiarem czasu (321) Włókna (322) Podsumowanie (325) Ćwiczenia (326)
Rozdział 8. Synchronizowanie wątków (329)
Dlaczego trzeba synchronizować wątki? (330) Obiekty synchronizacji wątków (339) Obiekty CRITICAL_SECTION (340) Obiekty CRITICAL_SECTION do zabezpieczania współużytkowanych zmiennych (343) Przykład - prosty system z producentem i konsumentem (345) Muteksy (351) Semafory (358) Zdarzenia (361) Przykład - system z producentem i konsumentem (364) Więcej wskazówek na temat muteksów i obiektów CRITICAL_SECTION (369) Inne funkcje Interlocked (371) Wydajność przy zarządzaniu pamięcią (373) Podsumowanie (374) Ćwiczenia (375)
Rozdział 9. Blokowanie, wydajność i dodatki w systemach NT6 (377)
Wpływ synchronizacji na wydajność (378) Program do badania wydajności (383) Dopracowywanie wydajności systemów wieloprocesorowych za pomocą liczby powtórzeń pętli obiektów CS (384) Blokady SRW w systemach NT6 (387) Zmniejszanie rywalizacji za pomocą puli wątków (390) Porty kończenia operacji wejścia-wyjścia (393) Pule wątków z systemów NT6 (394) Podsumowanie - wydajność blokowania (403) Paralelizm po raz wtóry (404) Koligacja procesora (409) Wskazówki i pułapki z obszaru wydajności (411) Podsumowanie (413) Ćwiczenia (414)
Rozdział 10. Zaawansowana synchronizacja wątków (417)
Model zmiennej warunkowej i właściwości związane z bezpieczeństwem (418) Stosowanie funkcji SignalObjectAndWait (426) Przykład - obiekt bariery z progiem (428) Obiekt kolejki (432) Przykład - wykorzystanie kolejek w wieloetapowym potoku (436) Zmienne warunkowe z systemów Windows NT6 (446) Asynchroniczne wywołania procedur (451) Kolejkowanie asynchronicznych wywołań procedur (452) Oczekiwanie z obsługą alertów (454) Bezpieczne anulowanie wątków (456) Wątki Pthreads i przenośność aplikacji (457) Stosy wątków i liczba wątków (457) Wskazówki z obszaru projektowania, diagnozowania i testowania (458) Poza interfejs Windows API (461) Podsumowanie (462) Ćwiczenia (463)
Rozdział 11. Komunikacja między procesami (467)
Potoki anonimowe (468) Przykład - przekierowywanie wejścia-wyjścia za pomocą potoku anonimowego (469) Potoki nazwane (472) Funkcje do obsługi transakcji z wykorzystaniem potoku nazwanego (479) Przykład - system klient-serwer do przetwarzania wiersza poleceń (483) Komentarze na temat programu klient-serwer do przetwarzania wiersza poleceń (489) Szczeliny pocztowe (491) Tworzenie i nazywanie potoków oraz szczelin pocztowych i nawiązywanie połączeń z nimi (496) Przykład - serwer możliwy do znalezienia przez klienty (496) Podsumowanie (499) Ćwiczenia (500)
Rozdział 12. Programowanie sieciowe z wykorzystaniem gniazd systemu Windows (503)
Gniazda systemu Windows (504) Funkcje do obsługi gniazd serwera (507) Funkcje do obsługi gniazd klienta (513) Porównanie potoków nazwanych i gniazd (515) Przykład - funkcja do odbierania komunikatów w gnieździe (516) Przykład - klient oparty na gniazdach (517) Przykład - oparty na gniazdach serwer z nowymi mechanizmami (519) Serwery wewnątrzprocesowe (529) Komunikaty oparte na wierszach, punkty wejścia bibliotek DLL i pamięć TLS (531) Przykład - bezpieczna ze względu na wątki biblioteka DLL do obsługi komunikatów w gniazdach (533) Przykład - inna strategia tworzenia bibliotek DLL bezpiecznych ze względu na wątki (538) Datagramy (541) Gniazda Berkeley a gniazda systemu Windows (543) Operacje nakładanego wejścia-wyjścia oparte na gniazdach systemu Windows (544) Dodatkowe funkcje gniazd systemu Windows (544) Podsumowanie (545) Ćwiczenia (546)
Rozdział 13. Usługi systemu Windows (549)
Tworzenie usług systemu Windows - przegląd (550) Funkcja main() (551) Funkcje ServiceMain() (552) Procedura sterująca usługi (557) Rejestrowanie zdarzeń (558) Przykład - nakładka na usługi (558) Zarządzanie usługami systemu Windows (565) Podsumowanie - działanie usług i zarządzanie nimi (569) Przykład - powłoka do sterowania usługą (569) Współużytkowanie obiektów jądra przy użyciu usługi (574) Uwagi na temat diagnozowania usług (575) Podsumowanie (576) Ćwiczenia (577)
Rozdział 14. Asynchroniczne operacje wejścia-wyjścia i IOCP (579)
Przegląd asynchronicznych operacji wejścia-wyjścia w systemie Windows (580) Operacje nakładanego wejścia-wyjścia (581) Przykład - synchronizacja z wykorzystaniem uchwytu pliku (586) Przykład - przekształcanie pliku za pomocą operacji nakładanego wejścia-wyjścia i wielu buforów (587) Wzbogacone operacje wejścia-wyjścia z procedurami zakończenia (591) Przykład - przekształcanie plików za pomocą wzbogaconych operacji wejścia-wyjścia (597) Asynchroniczne operacje wejścia-wyjścia z wykorzystaniem wątków (600) Zegary oczekujące (602) Przykład - korzystanie z zegarów oczekujących (605) Mechanizm IOCP (607) Przykład - serwer oparty na mechanizmie IOCP (612) Podsumowanie (619) Ćwiczenia (620)
Rozdział 15. Zabezpieczanie obiektów systemu Windows (623)
Atrybuty zabezpieczeń (623) Przegląd zabezpieczeń - deskryptor zabezpieczeń (624) Flagi kontrolne deskryptora zabezpieczeń (628) Identyfikatory zabezpieczeń (628) Zarządzanie listami ACL (630) Przykład - uprawnienia w stylu UNIX-a do plików NTFS (632) Przykład - inicjowanie atrybutów zabezpieczeń (636) Wczytywanie i modyfikowanie deskryptorów zabezpieczeń (641) Przykład - odczytywanie uprawnień do pliku (643) Przykład - modyfikowanie uprawnień do plików (645) Zabezpieczanie obiektów jądra i komunikacji (645) Przykład - zabezpieczanie procesu i jego wątków (648) Przegląd dodatkowych mechanizmów zabezpieczeń (648) Podsumowanie (650) Ćwiczenia (651)
Dodatek A: Używanie przykładowych programów (655)
Układ plików w pakiecie Przykłady (656)
Dodatek B: Przenośność kodu źródłowego - Windows, UNIX i Linux (659)
Strategie tworzenia przenośnego kodu źródłowego (660) Usługi systemu Windows dla systemu UNIX (660) Przenośność kodu źródłowego z funkcjami systemu Windows (661) Rozdziały 2. i 3. - zarządzanie plikami i katalogami (667) Rozdział 4. - obsługa wyjątków (672) Rozdział 5. - zarządzanie pamięcią, pliki odwzorowane w pamięci i biblioteki DLL (674) Rozdział 6. - zarządzanie procesem (675) Rozdział 7. - wątki i szeregowanie (677) Rozdziały od 8. do 10. - synchronizowanie wątków (679) Rozdział 11. - komunikacja między procesami (681) Rozdział 14. - asynchroniczne operacje wejścia-wyjścia (684) Rozdział 15. - zabezpieczanie obiektów systemu Windows (685)
Dodatek C: Wyniki pomiarów wydajności (687)
Konfiguracje testowe (687) Pomiary wydajności (690) Przeprowadzanie testów (703)
Bibliografia (705) Skorowidz (709)
|
|
|
|
|
|