Linux. Programowanie systemowe
Dodatkowe informacje
ISBN:978-83-[zasłonięte]-1497-4liczba stron: 400Okładka: miękkaWydawnictwo: HelionWymiary: 168 x 237 mmData wydania: 2[zasłonięte]008-09 Opis
Wykorzystaj moc Linuksa i twórz funkcjonalne oprogramowanie systemowe!
- Jak zarządzać plikowymi operacjami wejścia i wyjścia?
- Jak zablokować fragmenty przestrzeni adresowej?
- Jak sterować działaniem interfejsu odpytywania zdarzeń?
Dzisiaj systemu Linux nie musimy już nikomu przedstawiać, dzięki swojej funkcjonalności i uniwersalności stał się niezwykle popularny i szeroko wykorzystywany. Działa wszędzie - poczynając od najmniejszych telefonów komórkowych, a na potężnych superkomputerach kończąc. Z Linuksa korzystają agencje wywiadowcze i wojsko, jego niezawodność doceniły również banki i instytucje finansowe. Oprogramowanie z przestrzeni użytkownika w systemie Linux może być uruchamiane na wszystkich platformach, na których poprawnie działa kod jądra.
Czytając książkę "Linux. Programowanie systemowe", dowiesz się, jak utworzyć oprogramowanie, które jest niskopoziomowym kodem, komunikującym się bezpośrednio z jądrem oraz głównymi bibliotekami systemowymi. Opisany został tu sposób działania standardowych i zaawansowanych interfejsów zdefiniowanych w Linuksie. Po lekturze napiszesz inteligentniejszy i szybszy kod, który działa we wszystkich dystrybucjach Linuksa oraz na wszystkich rodzajach sprzętu. Nauczysz się budować poprawne oprogramowanie i maksymalnie je wykorzystywać.
- Programowanie systemowe
- Biblioteka języka C
- Kompilator języka C
- Interfejs odpytywania zdarzeń
- Zarządzanie procesami i pamięcią
- Użytkownicy i grupy
- Ograniczenia zasobów systemowych
- Zarządzanie plikami i katalogami
- Identyfikatory sygnałów
- Struktury danych reprezentujące czas
- Konwersje czasu
Poznaj i ujarzmij potęgę Linuksa!
Spis treści:
Przedmowa (7)
Wstęp (9)
1. Wprowadzenie - podstawowe pojęcia (15)
- Programowanie systemowe (15)
- API i ABI (18)
- Standardy (20)
- Pojęcia dotyczące programowania w Linuksie (23)
- Początek programowania systemowego (36)
2. Plikowe operacje wejścia i wyjścia (37)
- Otwieranie plików (38)
- Czytanie z pliku przy użyciu funkcji read() (43)
- Pisanie za pomocą funkcji write() (47)
- Zsynchronizowane operacje wejścia i wyjścia (51)
- Bezpośrednie operacje wejścia i wyjścia (55)
- Zamykanie plików (56)
- Szukanie za pomocą funkcji lseek() (57)
- Odczyty i zapisy pozycyjne (59)
- Obcinanie plików (60)
- Zwielokrotnione operacje wejścia i wyjścia (61)
- Organizacja wewnętrzna jądra (72)
- Zakończenie (76)
3. Buforowane operacje wejścia i wyjścia (77)
- Operacje wejścia i wyjścia, buforowane w przestrzeni użytkownika (77)
- Typowe operacje wejścia i wyjścia (79)
- Otwieranie plików (80)
- Otwieranie strumienia poprzez deskryptor pliku (81)
- Zamykanie strumieni (82)
- Czytanie ze strumienia (83)
- Pisanie do strumienia (86)
- Przykładowy program używający buforowanych operacji wejścia i wyjścia (88)
- Szukanie w strumieniu (89)
- Opróżnianie strumienia (91)
- Błędy i koniec pliku (92)
- Otrzymywanie skojarzonego deskryptora pliku (93)
- Parametry buforowania (93)
- Bezpieczeństwo wątków (95)
- Krytyczna analiza biblioteki typowych operacji wejścia i wyjścia (97)
- Zakończenie (98)
4. Zaawansowane operacje plikowe wejścia i wyjścia (99)
- Rozproszone operacje wejścia i wyjścia (100)
- Interfejs odpytywania zdarzeń (105)
- Odwzorowywanie plików w pamięci (110)
- Porady dla standardowych operacji plikowych wejścia i wyjścia (123)
- Operacje zsynchronizowane, synchroniczne i asynchroniczne (126)
- Zarządcy operacji wejścia i wyjścia oraz wydajność operacji wejścia i wyjścia (129)
- Zakończenie (141)
5. Zarządzanie procesami (143)
- Identyfikator procesu (143)
- Uruchamianie nowego procesu (146)
- Zakończenie procesu (153)
- Oczekiwanie na zakończone procesy potomka (156)
- Użytkownicy i grupy (166)
- Grupy sesji i procesów (171)
- Demony (176)
- Zakończenie (178)
6. Zaawansowane zarządzanie procesami (179)
- Szeregowanie procesów (179)
- Udostępnianie czasu procesora (183)
- Priorytety procesu (186)
- Wiązanie procesów do konkretnego procesora (189)
- Systemy czasu rzeczywistego (192)
- Ograniczenia zasobów systemowych (206)
7. Zarządzanie plikami i katalogami (213)
- Pliki i ich metadane (213)
- Katalogi (228)
- Dowiązania (240)
- Kopiowanie i przenoszenie plików (245)
- Węzły urządzeń (248)
- Komunikacja poza kolejką (249)
- Śledzenie zdarzeń związanych z plikami (251)
8. Zarządzanie pamięcią (261)
- Przestrzeń adresowa procesu (261)
- Przydzielanie pamięci dynamicznej (263)
- Zarządzanie segmentem danych (273)
- Anonimowe odwzorowania w pamięci (274)
- Zaawansowane operacje przydziału pamięci (278)
- Uruchamianie programów, używających systemu przydzielania pamięci (281)
- Przydziały pamięci wykorzystujące stos (282)
- Wybór mechanizmu przydzielania pamięci (286)
- Operacje na pamięci (287)
- Blokowanie pamięci (291)
- Przydział oportunistyczny (295)
9. Sygnały (297)
- Koncepcja sygnałów (298)
- Podstawowe zarządzanie sygnałami (304)
- Wysyłanie sygnału (309)
- Współużywalność (311)
- Zbiory sygnałów (314)
- Blokowanie sygnałów (315)
- Zaawansowane zarządzanie sygnałami (316)
- Wysyłanie sygnału z wykorzystaniem pola użytkowego (324)
- Zakończenie (325)
10. Czas (327)
- Struktury danych reprezentujące czas (329)
- Zegary POSIX (332)
- Pobieranie aktualnego czasu (334)
- Ustawianie aktualnego czasu (337)
- Konwersje czasu (338)
- Dostrajanie zegara systemowego (340)
- Stan uśpienia i oczekiwania (343)
- Liczniki (349)
A: Rozszerzenia kompilatora GCC dla języka C (357)
B: Bibliografia (369)
Skorowidz (373)