JĘZYK C I C++ W PROGRAMACH STEROWANIA LABORATORIUM SYSTEMÓW STEROWNIA PRZEMYSŁOWEGO I AUTOMATYKI BUDYNKÓW KATEDRA AUTOMATYKI NAPĘDU I URZĄDZEŃ PRZEMYSŁOWYCH WWW.KANIUP.AGH.EDU.PL AKADEMIA GÓRNICZO-HUTNICZA WWW.AGH.EDU.PL Temat: Narzędzia: Wprowadzenie do systemu QNX 6.3.x Neutrino Komputer z system operacyjnym QNX 6.3.x System operacyjny QNX 6.3.x Neutrino System operacyjny QNX 6.3.x Neutrino jest systemem 32 bitowym opracowanym przez kanadyjską firmę QNX Software Systems, Ltd. należącym do rodziny systemów UNIX. System QNX 6.3.x w wysokim stopniu spełnia standard POSIX 1003.1, opracowany w ramach IEEE jako IEEE Std 1003.1 wraz rozszerzeniami dotyczącymi systemów czasu rzeczywistego. Standard ten został zaakceptowany przez organizację ISO oraz IEC. Celem standaryzacji IEEE Std 1003.1 jest opracowanie standardów ułatwiających tworzenie łatwego do przenoszenia pomiędzy platformami oprogramowania na poziomie kodu źródłowego. Standaryzacja ta obejmuje: interfejs pomiędzy programem aplikacyjnym a systemem operacyjnym (API, ang.: Application Program Interface) dla języków C (C++), Fortran i Ada, interfejs użytkownika (polecenia systemowe), powłokę systemu operacyjnego (ang.: shell). Standard IEEE Std 1003.1 definiuje API do systemu operacyjnego, co obejmuje między innymi: tworzenie procesów i wątków, system plików wraz z atrybutami plików, użytkowników i grupy użytkowników, zarządzanie urządzeniami, komunikację międzyprocesową. W ramach prac standaryzacyjnych wprowadzono rozszerzenia standardu 1003.1 dotyczące systemów czasu rzeczywistego: 1003.1b rozszerzenia czasu rzeczywistego (szeregowanie priorytetowe, sygnały czasu rzeczywistego, czasomierze, priorytetowy system wejść/wyjść, komunikaty, semafory, ochronę pamięci), 1003.1c wątki (możliwość wykonywania wątków w ramach procesu, atrybuty wątków, szeregowanie wątków, muteksy, zmienne warunkowe), 1003.1d dodatkowe rozszerzenia czasu rzeczywistego (szeregowanie sporadyczne, monitorowanie czasu wykonywania procesów i wątków, przeterminowania funkcji blokujących, obsługę przerwań), 1003.1j zaawansowane rozszerzenia czasu rzeczywistego (wsparcie dla różnych typów pamięci, opóźnienia nanosekundowe, bariery, synchronizacje typu wirujące blokady, czytelników i pisarzy, zawiadomienia od kolejek komunikatów), 1003.21 przetwarzanie rozproszone (komunikacja w rozproszonych systemach czasu rzeczywistego, ograniczenia czasowe dla operacji blokujących, priorytety komunikatów). 1003.2h wysoka dostępność (sposoby konfiguracji, rekonfiguracji i testowania). System QNX 6.3.x jest systemem operacyjnym czasu rzeczywistego. Oznacza to, że oprócz podstawowego zadania każdego systemu operacyjnego, jakim jest zarządzanie zasobami komputera, ma on zdeterminowany maksymalny czas reakcji na zdarzenie zewnętrzne. Spełnienie tego warunku wymaga takiej konstrukcji systemu operacyjnego, aby były ograniczone od góry dwa czasy: czas opóźnienia reakcji na przerwanie (ang.: interrupt latency) czas liczony od wystąpienia przerwania do chwili rozpoczęcia wykonywania kodu funkcji obsługi danego przerwania, czas przełączania procesów i wątków (kontekstu) (ang.: context switching). System QNX 6.3.x jest systemem bardzo efektywnym w działaniu, mało obciążającym zasoby sprzętowe komputera oraz skalowalnym (to znaczy pozwalającym dobierać potrzebne komponenty systemu w zależności od potrzeb) w szerokim zakresie. Cechy te osiągnięto głównie dzięki architekturze system opartej na mikrojądrze. Ciekawą cechą systemu QNX 6.3.x jest zaimplementowanie protokołu sieciowego Qnet pozwalający łączyć zasoby komputerów pracujących w sieci Qnet w jeden logiczny komputer. Sieć ta zapewnia pełną przezroczystość w dostępie do zasobów niezależnie od tego, na którym węźle sieci się one znajdują. 1/12
Charakterystyczne cechy systemu QNX 6.3.x System QNX 6.3.x jako system czasu rzeczywistego posiada następujące cechy: Architektura systemu bazująca na mikrojądrze, Wieloprocesorowość wsparcie dla systemów wieloprocesorowych SMP, Wieloplatformowość wsparcie dla procesorów Intel x86, MIPS, ARM, Power PC, xscale, SH 4, Wielozadaniowość i wielowątkowość z priorytetami i wywłaszczaniem, Pełna ochrona pamięci, Zdeterminowany czas reakcji na przerwanie i czas przełączania kontekstu, Trzy algorytmy szeregowania procesów: FIFO (ang.: First In, First Out), karuzelowy (ang.: round robin) adaptacyjny (ang.: adaptive) Synchronizacja procesów poprzez: semafory, synchroniczną wymianę wiadomości, muteksy, zmienne warunkowe, zastosowanie algorytmu kolejkowania FIFO (w ograniczonym zakresie) Komunikacja międzyprocesowa i międzywątkowa: synchroniczna wymiana wiadomości (ang.: message passing), impulsy (ang.: pulses), sygnały, pamięć dzielona (ang.: shared memory), Czasomierze, Obsługa protokołów sieciowych Qnet, TCP/IP ze wsparciem dla IPv4 i IPv6, Wsparcie dla różnych systemów plików: RAM, QNX, Ext2 (Linux), FAT12, FAT16, FAT32, ISO9660 (CD ROM), Flash, NFS, CIFS (SMB), Szerokie możliwości konfigurowania i skalowania (modularność i skalowalność). Wywłaszczanie oznacza iż system operacyjny może przerwać wykonywanie procesu (wątku) (odebrać dostęp do procesora), przydzielając procesor innemu procesowi (wątkowi) na wykonywanie swoich zadań. Zatem system decyduje, jak długo dana aplikacja korzysta z procesora, i po upływie tego czasu następuje przekazanie kolejnej aplikacji procesorowi. (poprzednia zostaje wywłaszczona), lub jeśli dostępu do procesora zażąda proces o wyższym priorytecie. Dzięki temu jeśli pojedynczy proces ulegnie zawieszeniu nie spowoduje zawieszenia całego systemu. Budowa systemu QNX 6.3.x W przeciwieństwie do innych systemów z rodziny systemów UNIX, których architektura bazuje na jądrze monolitycznym o rozmiarze około 1 2 MB, budowa systemu operacyjnego QNX 6.3.x jest oparta na mikrojądrze, którego rozmiar wynosi kilkadziesiąt kilobajtów kodu. Na rysunku 1 przedstawiono mikrojądro systemu wraz kilkoma procesami. Rys. 1. Ogólna budowa systemu QNX 6.3.x 2/12
Ćwiczenie JCC-Q01. Wprowadzenie do systemu QNX 4.2x Mikrojądro jest odpowiedzialne za podstawowe funkcje systemowe oraz właściwą współpracę procesów i wątków. W systemie QNX 6.3.x nie ma rozróżnienia pomiędzy procesami i wątkami systemowymi i użytkownika (za wyjątek można uznać systemowy administrator procesów (procnto), będący procesem systemowym o bardzo wysokim priorytecie). Wszystkie procesy odwołują się do funkcji mikrojądra poprzez jednolity interfejs (API), jako wywołania funkcji. Schematyczną budowę mikrojądra systemu QNX 6.3.x pokazuje rysunek 2. Rys. 2. Mikrojądro w systemie QNX 6.3.x W mikrojądrze są zaimplementowane następujące funkcje systemowe: podstawowa obsługa procesów i wątków, kolejkowanie i przełączenie procesów oraz wątków, komunikacja międzyprocesowa i międzywątkowa, niskopoziomowa obsługa przerwań i ich redystrybucja, obsługa sygnałów, synchronizacja międzyprocesowa i międzywątkowa, czasomierze i zegary. Wszystkie pozostałe usługi systemu operacyjnego są zaimplementowane jako niezależne procesy systemowe nie różniące się od procesów użytkownika. Najczęściej wykorzystywanymi procesami systemowymi są: administrator procesów (procnto), administrator obsługi urządzeń blokowych (np. devb eide (urządzenia EIDE), devb ahci (urządzenia AHCI), devb fdc (stacje dyskietek), devb mass (pamięci Falsh)); administratory urządzeń znakowych (devc con (konsola), devc pty (terminal), devc par (port równoległy), devc ser8250 (port szeregowy RS 232)), administrator sieci (io net), administrator karty graficznej (io graphics), administratory odpowiednich klas urządzeń USB (devu kbd, devu mouse, devu ohci, devu prn, devu uhci). System plików W systemie QNX 6.3.x w systemie plików można wyróżnić następujące rodzaje plików: Pliki normalne (ang.: regular file) pliki nie posiadające określonej struktury służące do przechowywania danych, Katalogi (foldery) (ang.: directories) pliki zawierające nazwy innych plików oraz informacje o ich miejscu na dysku, prawach dostępu, itp. Pliki specjalne (ang.: block special files, charakter special files) reprezentują blokowe i znakowe urządzenia komputera. Dzięki temu mechanizmowi są widzialne w systemie plików jako zbiory w katalogu /dev. 3/12
Skróty (ang. link) pliki zawierające nazwę ścieżki do innego pliku lub katalogu, Kolejki FIFO (ang. fifo queue), pliki będące kanałami wejścia wyjścia, Potoki (ang.: pipe) jednokierunkowe ograniczone bufory łączące standardowe wyjście jednego procesu ze standardowym wejściem innego. Celem uporządkowania danych przechowywanych w systemie oraz ułatwienia dostępu do nich system plików ma strukturę drzewiastą. Podstawowy katalog zwany katalogiem głównym (ang.: root directory) jest oznaczany znakiem ukośnika /. W nim znajdują się pliki i inne katalogi, które z kolei mogą zawierać pliki i kolejne katalogi itd. W systemie QNX 6.3.x w celu dostępu do danych znajdujących się na innym urządzeniu (np. inny dysk, napęd CD-ROM, napęd dyskietek) należy najpierw zamontować dane urządzenie w dowolnym miejscu systemu plików. Dzięki temu możliwy jest dostęp do danych bez konieczności znajomości urządzenia, na którym się one znajdują. Struktura systemu plików w systemie QNX 6.3.x jest przedstawiona na rysunku 3. bin sbin / pkgs dev opt etc boot lib proc tmp net fs var usr bin sbin include lib local qnx632 photon help host install target root home grp1 grp2 grp3 user11 user12 user21 user21 user21 Rys. 3. Typowa struktura katalogów w systemie plików QNX 6.3.x W poszczególnych katalogach pliki są pogrupowane następująco: / katalog główny (root directory), bin katalog systemowy zawierający pliki wykonywalne systemu (polecenia), sbin katalog systemowy zawierający sterowniki urządzeń, dev katalog systemowy zawierający pliki specjalne reprezentujące urządzenia fizyczne (dyski, konsole, terminale, napędy CD-ROM, porty szeregowe, porty równoległe itp.), etc katalog systemowy zawierające pliki inicjujące i konfiguracyjne systemu, boot katalog systemowy zawierający narzędzia do wytwarzania obrazu systemu, lib katalog systemowy zawierający biblioteki systemowe, proc katalog systemowy wykorzystywany przez menedżera procesów procnto, tmp katalog plików tymczasowych, net katalog, w którym montowane są systemy plików komputerów dostępnych pracujących w sieci Qnet, 4/12
Ćwiczenie JCC-Q01. Wprowadzenie do systemu QNX 4.2x fs katalog, w którym montowane są systemy plików dostępne na komputerze lokalnym (między innymi napędy CD i DVD, dyski USB), pkgs katalog, w którym gromadzone są informacje (wersje, zależności) o zainstalowanych aplikacjach i bibliotekach za pomocą instalatora, opt katalog, którym instalowane są aplikacje i biblioteki za pomocą instalatora, var katalog zawierające różne pliki, usr katalog zawierający programy użytkowe (użytkownika), usr/bin katalog z plikami wykonywalnymi, usr/sbin katalog z plikami systemowymi, usr/include katalog z plikami nagłówkowymi języka C i C++, usr/lib katalog z plikami bibliotecznymi do języka C i C++ (i ewentualnie innych), usr/qnx632 katalog zawierający pliki narzędziowe dla platformy macierzystej (usr/qnx632/host), platform docelowych (usr/qnx632/target) i narzędzia instalacyjne (usr/qnx632/install), usr/photon katalog zawierający środowisko graficzne photon, usr/help katalog zawierający pliki pomocy, root katalog domowy superużytkownika root, home katalog zawierający konta użytkowników (katalogi domowe użytkowników (ang.: home directories)), Każdy plik ma swoją nazwę, która może się składać z dowolnej kombinacji cyfr, liter i innych znaków alfanumerycznych, z wyjątkiem znaków mających znaczenie specjalne, takich jak: & > <? ` / \ System rozróżnia duże i małe litery, na co należy zwracać szczególną uwagę, zwłaszcza przy przenoszeniu plików z systemu Windows. Dostęp do pliku określa ścieżka dostępu czyli lista katalogów oddzielonych znakami /, przez które należy przejść celem dotarcia do określonego pliku. Rozróżnia się ścieżki względne i bezwzględne. Nazwa ścieżki bezwzględnej zaczyna się od katalogu głównego (znakiem / ). Dzięki temu identyfikacja danego pliku jest jednoznaczna i niezależna od tego, w którym katalogu w danej chwili użytkownik się znajduje. Ścieżka względna identyfikuje dany zbiór z punktu widzenia katalogu bieżącego (w którym aktualnie użytkownik pracuje). Przykładem najkrótszej możliwej ścieżki względnej jest podanie samej nazwy pliku lub katalogu. W takim przypadku jest to ścieżka z katalogu bieżącego do podanego pliku lub katalogu, który się w danym katalogu bieżącym znajduje. Praca w systemie QNX Każda osoba pracująca w systemie QNX ma swoje konto, czyli przydzieloną część obszaru w systemie plików. Autoryzacja dostępu do konta jest możliwa za pomocą hasła. Każdy użytkownik należy do określonej grupy (lub kilku grup). Zakładając konto w systemie administrator określa m.in.: nazwę konta (login użytkownika) identyfikator (uid user identification number), hasło, grupę (lub grupy) do jakich należy, katalog użytkownika (domowy), Katalog użytkownika (katalog domowy) (ang.: home directory) jest to katalog zakładany podczas tworzenia konta każdemu użytkownikowi. Katalog ten należy tylko do tego danego użytkownika, mogącego tam umieszczać nowe pliki i tworzyć nowe katalogi. Pozostali użytkownicy (z wyjątkiem administratora) nie mają domyślnie pełnego dostępu do tego katalogu. Rozpoczęcie pracy z systemem Po załadowaniu systemu pojawia się okno logowania. Użytkownicy rozpoczynający pracę w systemie rozpoznawani są za pomocą nazwy (ang.: login) i hasła (ang.: password). Po autoryzacji pojawia ekran z pulpitem roboczym pokazanym na rysunku 4. 5/12
Rys. 4. Pulpit roboczy systemu QNX 6.3.x. Na pulpicie roboczym znajdują się: pasek zadań na dole pulpitu. Po lewej stronie paska znajduje przycisk <Launch> otwierający menu, w którym można wybrać aplikacje do uruchomienia, otworzyć okna do konfiguracji urządzeń oraz wylogować się lub zamknąć system. W pozostałej części paska zadań są umieszczane przyciski pozwalające na szybki dostęp do danej aplikacji. konfigurowalny panel boczny po prawej stronie pulpitu do uruchamiania aplikacji lub okien konfigurowani urządzeń. Poszczególne aplikacje są pogrupowane funkcjonalnie. Część aplikacji i okien konfiguracyjnych pokrywa się z pozycjami menu otwieranego przyciskiem <Launch> na pasku zadań. obszar roboczy, na którym otwierane są okna poszczególnych aplikacji. W czasie instalacji systemu na panelu bocznym standardowo jest umieszczanych większość aplikacji potrzebnych w czasie pracy. Poniżej przedstawiono niektóre użyteczne aplikacje dostępne z panelu bocznego: Help pomoc systemowa, w grupie Internet: Voyager systemowa przeglądarka internetowa, Mozilla przeglądarka internetowa (instalowana oddzielnie), Connect narzędzie pozwalające do połączenia ze środowiskiem Proton na zdalnym komputerze. w grupie Utilities: File Manager systemowa przeglądarka internetowa, Calculator przeglądarka internetowa (instalowana oddzielnie), Editor prosty edytor tekstu, Terminal terminal do pracy w trybie tekstowym, Find narzędzie do wyszukiwania plików w systemie plików System Information narzędzie diagnostyczne informujące o stanie aktualnie uruchomionych procesów i wątków, Image Viewer prosta przeglądarka plików graficznych (obsługuje formaty BMP, GIF, JPG, PNG, PCX, SGI), Snapshot narzędzie pozwalające zapisać wygląd ekranu lub okna w do pliku, w grupie Multimedia proste aplikacje do odtwarzania multimediów, 6/12
Ćwiczenie JCC-Q01. Wprowadzenie do systemu QNX 4.2x w grupie Games kilka gier, w grupie Configure narzędzia do konfigurowania systemu i środowiska graficznego Proton, System Monitor narzędzie pokazuję obciążenie zasobów systemowych: procesora, pamięci RAM, interfejsu sieciowego, dysku, World View narzędzie ułatwiające przechodzenie pomiędzy pulpitami roboczymi (zamiast kombinacją klawiszy Ctrl+Alt+n). W czasie pracy użytkownik ma standardowo dostępnych jednocześnie 9 pulpitów roboczych. Przełączanie między pulpitami następuję poprzez naciśnięcie kombinacji klawiszy: Ctrl+Alt+n, gdzie n jest numerem pulpitu tj. 1, 2, 3 itd. lub wybierając pulpit za pomocą narzędzia Word Wiew Dla przykłady chcąc przełączyć się na pulpit nr 2 należy nacisnąć kombinację klawiszy: Ctrl+Alt+2 Zakończenie sesji W celu zakończenia sesji należy pozamykać uruchomione aplikacje, a następnie zamknąć system. W tym celu należy postąpić jednym z podanych poniżej sposobów: kliknąć prawym przyciskiem myszy (gdy kursor znajduje się w obszarze roboczym). Zostanie otwarte menu, z którego należy wybrać pozycję Shutdown. Spowoduje to otwarcie okna, gdzie należy wybrać jeden ze sposobów zamknięcia systemu: Logout (End Proton session) zamyka środowisko graficzne i powoduje przejście do trybu tekstowego, Shut down system zamyka system do wyłączenia komputera, Shut down and reboot zamyka system i ponownie go uruchamia. kliknąć myszką na przycisku <Launch> na pasku zadań i wybrać z menu pozycję Log Out. Spowoduje to otwarcie okna, gdzie należy wybrać jeden ze sposobów zamknięcia systemu: Logout (End Proton session) zamyka środowisko graficzne i powoduje przejście do trybu tekstowego, Shut down system zamyka system do wyłączenia komputera, Shut down and reboot zamyka system i ponownie go uruchamia. Wydawanie poleceń tekstowych w systemie QNX 6.3.x W systemie QNX 6.3.x można wydawać polecenia tekstowe interpretowane i realizowane przez powłokę (ang.: shell) systemu. Należy w tym celu otworzyć okno terminala (np. klikając myszą w odpowiednią pozycję na panelu bocznym). Większość poleceń systemu QNX 6.3.x jest identyczna z poleceniami systemów rodziny UNIX. Istnieje też szereg poleceń charakterystycznych dla systemu QNX 6.3.x. Składnia polecenia jest następująca: nazwa_polec opcje argumenty gdzie: nazwa_polec opcje argumenty komenda dostępna w systemie lub własny program użytkownika. jedna lub kilka opcji dostępnych z daną komendą. Opcje modyfikują i precyzują wykonanie danego polecenia. Najczęściej podaje się je jako pojedyncze litery po znaku. obiekty, na których wykonywane są polecenia, np. pliki, urządzenia zewnętrzne. Podstawowe polecenia systemu QNX Znaki specjalne Podczas pisania poleceń należy pamiętać o specjalnym znaczeniu następujących znaków: & przenoszenie procesu w tło ( zerwanie powiązania pomiędzy procesem a konsolą (terminalem), z którego proces uruchomiono) > przekierowanie wyniku polecenia (wyjścia), < przekierowanie pobierania danych do polecenia, rozdzielenie kilku poleceń zapisanych w jednym wierszu w tzw. potok. * oznacza wszystkie pliki.? oznacza dowolną literę w nazwie pliku w miejscu, w którym znajduje się pytajnik Wyżej opisanych znaków nie można używać w nazwach poleceń i nazwach plików. 7/12
Operacje na plikach i katalogach. ls Wyświetla (listuje) zawartość katalogu. Składnia polecenia jest następująca: ls [opcje] [nazwa] Jeżeli nie jest podana nazwa katalogu lub zbioru, to wylistowany zostanie katalog bieżący. Najczęściej stosowane opcje to: a wyświetlane są wszystkie zbiory (również te, których nazwa zaczyna się od znaku kropki). D wyświetlane są tylko katalogi l wyświetlanie pełnej informacji (nie tylko nazw) o poszczególnych zbiorach w danym katalogu. Poszczególne opcje mogą być łączone ze sobą, na przykład: ls al wyświetla listę wszystkich plików w formacie pełnym. pwd Wyświetla bieżący katalog, w jakim użytkownik znajduje się w danym momencie. cd Zmienia katalog bieżący. Składnia polecenia jest następująca: cd katalog gdzie: katalog oznacza ścieżkę dostępu do nowego katalogu bieżącego. Jako nazwa nowego katalogu mogą pojawić znaki mające specjalne znaczenie w systemie plików: cd / przejście do katalogu podstawowego, cd.. przejście o jeden katalog w górę (w hierarchii drzewa katalogów), cd../.. przejście o dwa katalogi w górę, cd przejście do katalogu domowego z dowolnego miejsca. Przykłady: cd mucha cd /mucha cd /mucha/tse-tse przejście do katalogu mucha znajdującego się w katalogu bieżącym przejście do katalogu mucha znajdującego się w katalogu głównym systemu plików przejście do katalogu tse-tse znajdującego w katalogu mucha znajdującego się w katalogu głównym systemu plików mkdir Utworzenie nowego katalogu. Składnia polecenia jest następująca: mkdir katalog gdzie: katalog określa nazwę katalogu, który ma być utworzony. Przykłady: mkdir Trzmiel mkdir../osa tworzy katalog o nazwie Trzmiel w katalogu bieżącym tworzy katalog o nazwie osa w katalogu o jeden poziom wyżej w stosunku do bieżącego katalogu. rmdir Usunięcie katalogu. Usuwany katalog musi być pusty. Składnia polecenia jest następująca: rmdir katalog rm Usunięcie zbioru(ów) lub drzewa katalogów. Składnia polecenia jest następująca: rm [opcje] nazwa gdzie: nazwa określa zbiory lub katalogi które mają być usunięte. 8/12
Ćwiczenie JCC-Q01. Wprowadzenie do systemu QNX 4.2x Najczęściej używane opcje to: -i system żąda potwierdzenia usunięcia każdego zbioru -f system nie żąda potwierdzenia usunięcia zbiorów, które mają zabroniony zapis -v w czasie usuwania są listowane usuwane zbiory -R usuwanie całego drzewa katalogów łącznie z podkatalogami -d usuwanie plików z całego drzewa katalogów bez usuwania samej struktury katalogów Przykłady: rm MojZbior rm v katalog/* rm vr * usuwa zbiór o nazwie MojZbior z bieżącego katalogu. usuwa wszystkie zbiory w katalogu katalog i listuje usuwane zbiory. usuwa wszystkie zbiory i katalogi z katalogu bieżącego i listuje usuwane zbiory. mv Przenoszenie lub zmiana nazwy zbiorów. Składnia polecenia jest następująca: mv [opcje] plik1 plik2 gdzie: plik1 określa zbiór, który ma być przeniesiony do miejsca określonego przez nazwę plik2. Jeśli nazwa plik2 identyfikuje zbiór (nie katalog) w tym samym katalogu to następuje zmiana nazwy pliku, w przeciwnym wypadku plik jest przeniesiony do katalogu określonego nazwą plik2. Jeżeli ma być przeniesionych więcej niż jeden plik (np. poprzez użycie znaków * lub? w nazwie plik1), to nazwa plik2 musi określać katalog. Na przykład: mv jeden.txt dwa.txt mv jeden.txt abc zmienia nazwę pliku jeden.txt na dwa.txt. jeżeli abc jest nazwą katalogu w katalogu bieżącym to plik jeden.txt zostanie przeniesiony do katalogu abc bez zmiany nazwy. W katalogu bieżącym plik jeden.txt przestaje istnieć. cp Kopiowanie zbioru(ów) lub drzewa katalogów. Składnia plecenia jest następująca: cp[opcje] plik1 plik2 gdzie: plik2 określa nazwę zbioru lub katalogu docelowego, do którego ma być skopiowany plik1. Jeżeli ma być skopiowanych więcej niż jeden plik (np. poprzez użycie znaków * lub? w nazwie), to nazwa plik2 musi określać katalog. Najczęściej używane opcje to: -v w trakcie kopiowania są listowane zbiory kopiowane. -R kopiowanie drzewa katalogów. Parametr ten musi być użyty jeśli zbiorem źródłowym jest katalog. -i podczas kopiowania system żąda potwierdzenia, jeżeli nastąpi zapisanie kopiowanego zbioru na już istniejącym. -c w czasie kopiowania tworzone jest automatycznie drzewo katalogów, takie jak w katalogu źródłowym. Używana jest przeważnie łącznie z opcją R Przykłady: cp jeden.txt dwa.txt cp v oko* kopia/ cp vrc *../backup/ kopiuje zbiór jeden.txt na zbiór dwa.txt. kopiuje wszystkie zbiory, których nazwy zaczynają się ciągiem znaków oko do katalogu kopia i listuje nazwy zbiorów kopiowanych. kopiuje wszystkie zbiory i katalogi z katalogu bieżącego do katalogu backup znajdującego się o jeden poziom wyżej w stosunku do bieżącego i listuje nazwy kopiowanych zbiorów. ln Tworzenie linku (dowiązania) do pliku. Nazwa będąca dowiązaniem do pliku może znajdować się w zupełnie innym katalogu niż plik macierzysty. Rozróżnia się linki twarde (ang.: hard link) i linki symboliczne (ang.: symbolic link). Link twardy to nadanie innej nazwy istniejącemu plikowi (przez to link oraz oryginał stają się przez to nierozróżnialne). Link 9/12
symboliczny jest specjalnym typem pliku wskazującym na plik oryginalny poprzez jego nazwę (jest to wpis w katalogu wskazującym na nazwę oryginalnego pliku). Składnia polecenia ln, w przypadku tworzenia linku twardego o nazwie plik2 do pliku o nazwie plik1 wygląda następująco: ln plik1 plik2 Dodanie opcji -s pozwala na utworzenie linku symbolicznego. find Wyszukiwarka systemowa. Najczęściej wykorzystuje się ją do znajdowania na dysku pliku o nazwie plik rozpoczynając szukanie od katalogu katalog. W tym przypadku format polecenia jest następujący: find /katalog name plik cat Wyświetlenie zawartość pliku o nazwie plik. cat plik more Filtr umożliwiający wyświetlanie zawartości pliku tekstowego o nazwie plik na ekranie konsoli (terminala) w sposób umożliwiający wstrzymanie wyświetlania po każdym zapełnieniu ekranu. more plik less Podobnie jak more z tym, że umożliwia także przeglądanie wstecz. less plik wc Zliczanie liczby linii, słów lub znaków w pliku o nazwie plik. Składnia polecenia jest następująca: wc [opcje] plik Znaczenie opcji jest następujące: -c zliczanie znaków, -l zliczanie linii, -w zliczanie słów. Prawa dostępu do plików W systemie QNX dostęp do każdego pliku jest chroniony poprzez system własności plików i praw dostępu. Każdy plik ma swojego właściciela i jest przypisany do grupy użytkowników. Prawa dostępu podzielone są na trzy grupy: dostęp dla właściciela, grupy użytkowników i pozostałych. Możliwe do przydzielenia prawa to: r prawo czytania, w prawo zapisu, x prawo wykonywania pliku. W przypadku katalogu prawo zapisu oznacza, iż zawarte w nim pliki można usuwać i zmieniać, a prawo wykonania pozwala na listowanie zawartości katalogu. Do zmiany uprawnień użytkowników w stosunku do pliku czy katalogu służy polecenie chmod. Składnia polecenia jest następująca: chmod prawa_dostępu plik Prawa dostępu można podawać w dwojaki sposób: w postaci liczbowej z zastosowaniem zapisu ósemkowego, przy założeniu, że prawu odczytu r odpowiada wartość 4, prawu zapisu w 2, a prawu wykonywania x 1, brak danego prawa równoważny jest 0. W ramach danej grupy użytkowników wartości liczbowe sumują się. w postaci specyfikacji: u[+ - =][rwx], g[+ - =][rwx], o[+ - =][rwx]. Litery u, g i o oznaczają prawa właściciela, grupy i innych użytkowników. Znak + oznacza dodanie prawa, znak - 10/12
Ćwiczenie JCC-Q01. Wprowadzenie do systemu QNX 4.2x powoduje odebranie prawa, a znak = ustawienie prawa. Litery r, w i x oznaczają prawo odczytu, zapisu i wykonania. Przykładowo: chmod u=rwx,g=rx,o=r mojplik chmod 754 mojplik ustawiają te same prawa dostępu, czyli właściciel pliku mojplik będzie miał wszystkie uprawnienia (rwx, czyli liczbowo 4+2+1 =7, stąd pierwsza liczba 7 dla użytkownika), członkowie grupy będą mogli wykonać go lub odczytać (r-x, czyli 4+0+1=5), a inni mogą go tylko odczytać. Polecenia różne passwd Umożliwia zmianę hasła wpisywanego przez użytkownika przy logowaniu się do systemu. Na żądanie systemu należy podać kolejno stare hasło i dwukrotnie nowe. date Aktualna data i godzina. slay Polecenie to zabija proces o podanej nazwie. Składnia polecenia slay jest następująca: slay [opcje] nazwa_procesu gdzie: nazwa_procesu jest nazwą procesu (programu), który chcemy usunąć. Wśród dostępnych opcji najczęściej wykorzystuje się: Przykładowo: slay f prog1 usuwają wszystkie procesy o nazwie prog1 bez ostrzeżenia i zapytania o zgodę na usunięcie, jeśli w systemie będzie uruchomionych wiele instancji programu prog1. wc Zliczanie liczby linii, słów lub znaków w pliku o nazwie plik. Składnia polecenia jest następująca: wc [opcje] plik Najczęściej wykorzystywane opcje to: -c zliczanie znaków, -l zliczanie linii, -w zliczanie słów. use Wyświetla tekst pomocy dla danego polecenia. Składnia polecenia use jest następująca: use nazwa_polecenia gdzie: nazwa_polecenia jest nazwą polecenia systemowego. Zmiana pulpitu Do zmiany bieżącego pulpitu służy kombinacja klawiszy Ctrl+Alt+n, gdzie n jest numerem pulpitu. Na przykład naciskając klawisze Ctrl+Alt+3 przełączamy się na pulpit 3. Domyślnie system QNX 6.3.x jest instalowany z możliwością jednoczesnego używania 9 pulpitów (1 9). Niektóre programy użytkowe pterm Terminal środowiska graficznego Photon. Najwygodniej można go uruchomić przez kliknięcie myszką na odpowiedniej pozycji na panelu bocznym pulpitu. W otwartym terminali można wykonywać polecenia systemowe i uruchamiać aplikacje pisząc odpowiednie polecenia. W celu zamknięcia terminala (i okna terminala) należy nacisnąć kombinację klawiszy Ctrl+D 11/12
mc Midnight Commander tekstowy menedżer plików, który należy uruchamiać w oknie terminala. Narzędzie to jest także dostępne w innych systemach z rodziny systemu UNIX (np. w systemie Linux). gcc, g++ Kompilator systemowy. Polecenie to uruchamia kompilator odpowiedniego języka (C lub C++) i ewentualnie linker. Składnia polecenia jest następująca: gcc plik [opcje] gdzie: plik jest nazwą zbioru w danym języku, który ma zostać poddany kompilacji. W zależności od rozszerzenia nazwy pliku jest uruchamiany kompilator odpowiedniego języka. Przykłady: gcc program.c Kompilacja i konsolidacja programu o nazwie program.c z zapisaniem kodu wynikowego w pliku a.out. Do kompilacji zostanie użyty kompilator języka C. g++ prog.cpp o abc Kompilacja i konsolidacja programu o nazwie prog.cpp z zapisaniem kodu wynikowego w pliku abc. Do kompilacji zostanie użyty kompilator języka C++. g++ prog.cpp o prog v -lncurses Kompilacja i konsolidacja programu o nazwie prog.cpp z zapisaniem kodu wynikowego w pliku prog. Do konsolidacji programu, oprócz biblioteki standardowej, zostanie dołączona biblioteka ncurses (opcja l). Dodatkowo zostanie wyprowadzony szczegółowy raport z kompilacji (opcja v). Do kompilacji zostanie użyty kompilator języka C++. ped Edytor tekstowy. Najwygodniej można go uruchomić przez kliknięcie myszką na odpowiedniej pozycji na panelu bocznym pulpitu. Jest to prosty edytor tekstu pozwalający na jednoczesną edycję kilku plików. Można go używać do edycji plików źródłowych programów na laboratorium. sin (psin) Informacja o stanie procesów i wątków uruchomionych w systemie. Dostępne są dwie wersje programu: tekstowa do uruchomienia w oknie terminala (sin) i graficzna jako oddzielna aplikacja w środowisku Proton (psin). Wersję graficzną najwygodniej można uruchomić przez kliknięcie myszką na odpowiedniej pozycji na panelu bocznym pulpitu pfm Graficzny menedżer plików pozwalający na przeglądanie systemu plików oraz na wykonywanie podstawowych operacji na plikach i katalogach (kopiowanie, przenoszenie, usuwanie itp.). Program ćwiczenia Pliki związane z ćwiczeniem należy zapisywać w katalogu /home/jcc1, /home/jcc2 lub /home/jcc3 w zależności od grupy laboratoryjnej. 1. Zalogować się systemie QNX 6.3.x 2. Otworzyć okno terminala. 3. Za pomocą poleceń ls i chdir (cd) przeglądnąć strukturę katalogów. Przy poleceniu ls zwrócić uwagę na właścicieli plików i prawa dostępu. 4. W swoim roboczym katalogu utworzyć nowy katalog i przekopiować do niego kilka plików z innego katalogu i następnie je usunąć korzystając z poleceń systemowych mkdir, cp i rm. 5. Uruchomić drugi terminal a w nim tekstowy menedżer plików Midnight Commander. Używając Midnight Commandera powtórzyć czynności z punktów 3 i 4. 6. Uruchomić edytor tekstu ped. Za jego pomocą napisać kilkuwierszowy program w języku C++ (np. Hello Word ). Zapisać plik na dysku. 7. Pisząc odpowiednie polecenie w oknie terminala skompilować program napisany w punkcie 6 i uruchomić go. 12/12