Podstawy programowania Unixa/Linuxa :: Sieci TCP/IP :: Rzeczy trochę ciekawsze :: Graficzny interfejs użytkownika (GUI) :: Multimedia :: Bliżej sprzętu i jądra :: Metody numeryczne :: Linki i moje projekty

Programowanie C/C++ (Linux)

W dziale tym zajmę się programowaniem w C i C++ głównie dla Linuxa (ze względu na wykorzystywane funkcje systemowe tego systemu i testowanie w nim prezentowanych rozwiązań). Nie będzie to jednak typowe omówienie czy kurs tego języka, prócz krótkiego wprowadzenia w podstawy tego języka, zamieszczę tutaj szereg bogato komentowanych, niewielkich programów ilustrujących poszczególne zagadnienia. Omówię również korzystanie z ważniejszych/ciekawszych bibliotek (w tym bibliotek standardowych C i C++). Na wstępie zachęcam do zapoznania się z przykładem zamieszczonym w części "wstępu do techniki" poswięconej porgramowaniu, a także przykładom wprowadzającym w podstawy C i C++.

Podstawy programowania Unixa/Linuxa

  • katalogi.c - katalogi, czyli nasze własne ls ;-) + obsługa błędów z wykorzystaniem errno.h (mechanizm bardzo przydatny przy korzystaniu z bardziej zaawansowanych funkcji ... w celu ustalenia dlaczego to nie działa)
  • unix.c - funkcje Unix'owate ... (w tym sygnały, deskryptory i czas)
  • opcje.c - przetwarzanie opcji unix'owych (-h) i GNU (--help)
  • fork.c - wywołania innych programów i pipe
  • watki.c - tworzenie aplikacji wielowątkowych z wykorzystaniem pthread
  • watki_clone.c - tworzenie aplikacji wielowątkowych z wykorzystaniem clone()
  • semafory_posix.c - używanie semaforów, timerów, pamięci współdzielonej oraz asynchronicznego wyjścia zgodnych ze standardem POSIXowych
  • semafory_ipc.c - wykorzystywanie semaforów i innych mechanizmów SystemV IPC (svipc) do komunikacji między procesami,
    więcej o komunikacji międzyprocesorowej w LINUX - Synchronizacja i komunikacja procesów
  • tty-listener.c - program wykorzystujący urządzenia vcs i vcsa do podebrania ekranu (tekstu) z terminala tty

Sieci TCP/IP

  • numeracja_ipv6.c - prosty program demonstrujący adresację IPv6 (wraz z konwersja postaci napisowej na numeryczną) obliczający adres sieci na podstawie maski i adresu hosta
  • nazwy_hostow.c - prosty program demonstrujący przekształcanie nazwy hosta na adres IP
  • UDP_nadajnik.c, UDP_odbiornik.c, TCP_serwer.c - zestaw programów pokazujących komunikację przez UDP i TCP
  • jabber.cpp - prosta komunikacja przez sieć, z wykorzystaniem protokołu Jabber i napisów języka C++

Rzeczy trochę ciekawsze

Warto też zajrzeć na C++0x aby zobaczyć jakie zmiany planowane są w następnej wersji standardu C++.

Graficzny interfejs użytkownika (GUI)

GTK jest biblioteką do tworzenia GUI, stworzoną na potrzeby GIMPa oraz wykorzystywaną w projekcie GNOME. Napisana jest w sposób obiektowy w języku C. Inną biblioteką do tworzenia GUI (i nie tylko ma moduły obsługi baz danych, sieci, grafiki 3D - OpenGL, ...) jest Qt, w której powstaje KDE. Jest to w pełni obiektowa biblioteka C++.

  • ncurses_1.c - zaawansowane wyświetlanie na terminalu tekstowym z wykorzystaniem biblioteki termcap; więcej o termcap
  • ncurses_2.c - zaawansowane wyświetlanie na terminalu tekstowym z wykorzystaniem biblioteki terminfo
  • ncurses_3.c - zaawansowane wyświetlanie na terminalu tekstowym z wykorzystaniem biblioteki ncurses

Multimedia

Dźwięk w Linuxie obsługiwany jest najczęściej przez sterowniki Alsa lub OSS - w obu przypadkach dostępne jest urządzenie /dev/dsp jednak w przypadku Alsa nie jest ono natywnym sposobem obsługi tego sterownika. Często także powyżej sterownika funkcjonują serwery dźwięku takie jak "jack" lub "arts"

Z kolei SDL jest biblioteka multimedialna, obsługująca grafikę 2D i 3D, dźwięk, urządzenia wejścia/wyjścia. W zastosowaniach graficznych wykorzystuje OpenGL (niskopoziomowy interfejs graficzny). OpenGL posiada również własne wyżej poziomowe biblioteki (GLU, GLUT, GLUI, ...). Można powiedzieć że SDL stanowi swego rodzaju wieloplatformowy odpowiednik dla DirectX (OpenGL jest rozwiązaniem konkurencyjnym dla Direct3D).

W tym miejscu warto też wspomnieć że istnieją również wyżej poziomowe, wieloplatformowe biblioteki wyspecjalizowane w tworzeniu gier, takie jak: Allegro (grafika 2D), Crystal Space (grafika 3D), ... .

  • dsp.c - program kopiujący dane z /dev/dsp do serwera artsd (kiedys kopiowal do /dev/dsp); demonstruje korzystanie z tego pliku oraz rozwiązuje problem oglądania TV z tunera z wykorzystaniem (zintegrowanych) kart dźwiękowych opartych na CMI9880
  • alsa_copy.c - program o funkcjonalności dsp.c tyleże korzystający wyłącznie z biblioteki asound (ALSA) a zatem umożliwiający korzystanie z dmix
  • openal.c - program prezentuje podstawy korzystania z biblioteki OpenAL służącej do implementacji dźwięku (przestrzennego) w multimediach, zobacz także: OpenAL na devmaster oficjalna dokumentacja OpenAL
  • pokaz_slajdow_sdl.c - program demonstrujący korzystanie z SDL (wyświetlanie bitmap, obsługa zdarzeń - klawiatura i tworzenie własnych, timery, czyszczenie ekranu); więcej o SDL: SDL API Polski serwis o SDL
  • rysownik_sdl.c - program demonstrujący korzystanie z SDL (rysowanie pikseli, obsługa zdarzeń - klawiatura i mysz, zapis obrazu do bitmapy)
  • obraz_kontrolny.cpp - program generujący z wykorzystaniem SDL obraz kontrolny (umieszcza stosowne napisy na podanym pliku graficznym), domonstruje również użycie LibVLC jako wyjścia obrazu (zobacz w sieci: przykład użycia libvlc jako wejścia obrazu), zamieszczam też archiwum z obrazami kontrolnymi do wykorzystania w tym programie.
  • zamieszczam zestaw przykładowych programów obrazujących korzystanie z OpenGL:Zobacz także mój projekt podstawa silnika 3d.

Zobacz w Sieci: Strona domowa Janusza Ganczarskiego - OpenGL, OpenGL Shading Language Tutorials and Demos GLSL Tutorial, Grafika 3D - OpenGL, Tutoriale do OpenGL na spacesimulator.net, Kurs biblioteki SDL, część 1, Kurs biblioteki SDL, część 2, Biblioteka OpenGL na Politechnice Śląskiej, Kurs programowania GLUT, Jaka metoda generowania dynamicznych cieni?, oficjalna dokumentacja OpenGL (man pages, specifications, ... for OpenGL, GLUT, GLU, GLX, ...), Shader, Opengl, GLUT, OpenGL Shading Language, OpenGL Shading Language @ Wikibooks, OpenCL.

Interesujące jest także wykorzystanie dostępnych na wolnych licencjach bibliotek / silników obsługi grafiki trójwymiarowej, takich jak OGRE, Irrlicht, Crystal Space. Zobacz w Sieci: Kurs Irrlicht, C++, OGRE @ Wikibooks.

Bliżej sprzętu i jądra

  • test_libusb.c - program demonstrujący komunikację poprzez USB z wykorzystaniem biblioteki libusb
  • ups_off.c - program sprawdzający stan zasilania z ups'u (poprzez port COM) i wykonujący wyłączenie systemu gdy jest zasilanie z zrodla awaryjnego ...
  • zawieszacz.c - co zrobić aby system zajmował się tylko naszym programem ...
  • priorytety.c - ustalanie priorytetów (nice i priorytet czasu rzeczywistego), więcej o kolejkowaniu zadań
  • czekanie.c - jak wykonywać dość precyzyjne opóźnienia w programie ...
  • modul.c, Makefile - demonstracyjny moduł jądra Linux wraz z Makefile umożliwiającym jego zbudowanie ... pokazuje inicjacje i usuwanie modułu, korzystanie z urządzeń znakowych oraz przerwań; więcej o modułach: The Linux Kernel Module Programming Guide, Linux Device Drivers
  • zabawy_pamiecia.c - plik obrazuje sposób alokacji pamięci przez system Linux
  • ftdi_ds18b20.tar.gz - zestaw modułów dla Linuxa składających się na sterownik do obsługi termometru ds18b20 opartego na interfejsie OneWire z wykorzystaniem układu FTDI FT245BM do emulacji portu OneWire (rozpowszechniane na zasadach GNU GPL)
  • vkbd.tar.gz - moduł wirtualnej klawiatury, umożliwiającej odbieranie znaków i key-kodów wpisywanych do urządzenia w /dev tak jakby przychodziły z podsystemu input od rzeczywistej lokalnej klawiatury (rozpowszechniane na GNU GPL)

Oczywiście oprócz zaprezentowanych w powyższych przykładach technik programowania modułów jądra. Linux oferuje wiele innych udogodnień - np. kolejki kfifo (bufory cykliczne). Należy zaznaczyć też iż programowanie jądra wymaga szczególnej uwagi gdyż wiele z mechanizmów chroniących programy uruchamiane w przestrzeni użytkownika tutaj nie funkcjonuje. Ponadto szczególną uwagę należy zwrócić na niemożność używania wielu funkcji w obsłudze przerwań.

Metody numeryczne

Jest to zbiór funkcji prezentujących podstawy metod numerycznych. Jako że programy te napisałem pewien czas temu nie jestem w stanie obecnie zagwarantować że działają one w pełni poprawnie. Zachęcam do zapoznania się z skryptem z metod numerycznych dostępnym na stronie Strona o Metodach Numerycznych (1) ... więcej o metodach numerycznych także na Strona o Metodach Numerycznych (2).


Copyright (c) 1999-2012, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/more_advanced/programing/c_cpp) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-08-21 11:01:00 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).