Linux
Programowanie systemowe
Jądro systemu Linux to jeden z największych projektów rozwijanych przez ogromną
społeczność. Setki wolontariuszy dniami i nocami rozwijają najważniejszy element tego
systemu operacyjnego. I robią to naprawdę skutecznie! Każde kolejne wydanie Linuksa
zawiera dziesiątki nowinek oraz ulepszeń - jest coraz szybsze, bezpieczniejsze i po
prostu lepsze. Jednak początkujący programiści mogą mieć problemy z wykorzystaniem
usług dostarczanych przez kernel. Masz obawy, że nie odnajdziesz się w gąszczu
możliwości współczesnego jądra systemu Linux?
Ta książka rozwieje je w mig. Jest to wyjątkowa pozycja na rynku wydawniczym,
zgłębiająca właśnie te tajemnice.
W trakcie lektury nauczysz się tworzyć niskopoziomowe oprogramowanie, które będzie
się komunikowało bezpośrednio z jądrem systemu.
Operacje wejścia i wyjścia, strumienie, zdarzenia, procesy to tylko część
elementów, które błyskawicznie opanujesz. Ponadto nauczysz się zarządzać katalogami
i plikami oraz poznasz koncepcję sygnałów. Książka ta jest niezastąpionym źródłem
informacji dla wszystkich programistów pracujących z jądrem Linuksa. Docenisz tę
lekturę!
Poznaj:
metody zarządzania procesami
zastosowanie sygnałów
zaawansowane interfejsy wejścia i wyjścia
jądro systemu od podszewki
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)
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)
448 stron, oprawa miękka