Obsługa plików Procesy

Podobne dokumenty
Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Temat zajęć: Obsługa systemu plików.

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Procesy. S. Samolej: Procesy

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

Kolejki FIFO (łącza nazwane)

Temat zajęć: Obsługa procesów w systemie.

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Funkcje jadra systemu operacyjnego UNIX

4.2 Sposób korzystania z l acza

Funkcje jadra systemu operacyjnego UNIX

systemu operacyjnego UNIX Funkcje jadra Spis treści Dariusz Wawrzyniak 20 października Wst ep 5

procesy odrębne dzielone

2. Zarządzanie procesami

pami eć operacyjna przechowuje dane do przetworzenia, tymczasowe dane pomocnicze,

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

Temat zajęć: Obsługa łączy komunikacyjnych

Łącza nienazwane(potoki)

Model procesu w systemie Linux. Tomasz Borzyszkowski

przypadków wywo lanie systemowe (funkcja systemowa) lub funkcja biblioteczna zwraca wartość 1(czasamiNULL) iprzypisujezmiennej zewn etrznej,

Plik jest poj eciem, z którym spotyka si e niemal każdy użytkownik systemu komputerowego, nawet

Procesy. 5. Procesy (2005/2006)

Systemy Operacyjne Ćwiczenia

Procesy w systemach UNIX i Linux

Procesy, pliki, potoki, sygnały - uzupełnienie

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

System plików warstwa logiczna

Procesy i potoki. S. Samolej: Procesy

Pobieranie argumentów wiersza polecenia

1. Procesy i współbieżność

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Systemy Operacyjne - Operacje na plikach

sposób wykonywania operacji zapisu i odczytu dane odczytywane z l acza usuwane (nie można ich odczytać ponownie),

Programowanie w ANSI C z wykorzystaniem funkcji jądra systemu UNIX/Linux

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

Krótki kurs programowania współbieżnego

2. Zarządzanie procesami

2. Zarządzanie procesami

Sygnały. 7. Sygnały (2005/2006)

4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane

Zarządzanie Procesami

Operacje powiązane z systemem:

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Pamięć współdzielona

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wstęp do Programowania, laboratorium 02

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

J. Ułasiewicz Łącza nienazwane, nazwane, select 1

Programowanie w systemie UNIX

IPC: Kolejki komunikatów

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Iteracyjny serwer TCP i aplikacja UDP

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Programowanie Proceduralne

Programowanie Współbieżne. W Linuxie/Unixie

Programowanie w językach

Biblioteka standardowa - operacje wejścia/wyjścia

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Dariusz Wawrzyniak 5 kwietnia 2001

1 Przygotował: mgr inż. Maciej Lasota

aodczytywać zniegoza pomoc afunkcjiread, (niebuforowane funkcje wejścia/wyjścia). e sukcesem, to zwróci liczb, erzeczywiściezapisanychbajtów.

Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Jądro Powłoka System plików Programy użytkowe

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Podstawy programowania w języku C++

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Argumenty wywołania programu, operacje na plikach

Pliki. Informacje ogólne. Obsługa plików w języku C

Systemy Operacyjne I: Procesy

Programowanie Procedurale. Pliki w języku C++

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Moduł 4: Strumienie, potoki, sterowanie procesami

Metody zawarte w klasie File: boolean createnewfile() tworzy nowy, pusty plik, ale tylko jeśli on wcześniej nie istniał. boolean delete() usuwa dany

Komunikacja za pomocą potoków. Tomasz Borzyszkowski

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

<stdio.h> <iostram> input. FILE *stdin. std::cin output. std::cout error. FILE *stdout. FILE *stderr

Linux: System Plików

Programowanie w językach wysokiego poziomu

Wskaźniki w C. Anna Gogolińska

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Pliki. Informacje ogólne. Obsługa plików w języku C

Podstawy i języki programowania

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Wprowadzenie do języka C

Transkrypt:

Obsługa plików Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 15 października 2011

Plan zajęć 1 Obsługa plików 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach 3 Operacje na deskryptorach 4 Zadania 2 Procesy 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe 3 Zadania teoretyczne 4 Zadania praktyczne Mateusz Hołenko Obsługa plików, Procesy [1/40]

Plan zajęć 1 Obsługa plików 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach 3 Operacje na deskryptorach 4 Zadania 2 Procesy 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe 3 Zadania teoretyczne 4 Zadania praktyczne Mateusz Hołenko Obsługa plików, Procesy [1/40]

Obsługa plików Mateusz Hołenko Obsługa plików, Procesy [2/40]

Pliki w systemie Linux Mateusz Hołenko Obsługa plików, Procesy [3/40]

I-węzły (ang. I-nodes) plik podstawowa forma przechowywania danych w komputerze dla systemu operacyjnego plik jest ciągiem bajtów przechowywanych najczęściej w pamięci nieulotnej i-węzeł struktura systemu plików w tradycyjnych Linux ach zawierająca metainformacje o pliku, m.in.: właściciel pliku, prawa dostępu typ pliku, czasy dostępu ilość dowiązań, rozmiar pliku wskaźnik na fizyczną lokalizację pliku na dysku i-węzeł nie zawiera nazwy pliku ani ścieżki do niego! Mateusz Hołenko Obsługa plików, Procesy [4/40]

I-węzły (ang. I-nodes) plik podstawowa forma przechowywania danych w komputerze dla systemu operacyjnego plik jest ciągiem bajtów przechowywanych najczęściej w pamięci nieulotnej i-węzeł struktura systemu plików w tradycyjnych Linux ach zawierająca metainformacje o pliku, m.in.: właściciel pliku, prawa dostępu typ pliku, czasy dostępu ilość dowiązań, rozmiar pliku wskaźnik na fizyczną lokalizację pliku na dysku i-węzeł nie zawiera nazwy pliku ani ścieżki do niego! Mateusz Hołenko Obsługa plików, Procesy [4/40]

I-węzły (ang. I-nodes) plik podstawowa forma przechowywania danych w komputerze dla systemu operacyjnego plik jest ciągiem bajtów przechowywanych najczęściej w pamięci nieulotnej i-węzeł struktura systemu plików w tradycyjnych Linux ach zawierająca metainformacje o pliku, m.in.: właściciel pliku, prawa dostępu typ pliku, czasy dostępu ilość dowiązań, rozmiar pliku wskaźnik na fizyczną lokalizację pliku na dysku i-węzeł nie zawiera nazwy pliku ani ścieżki do niego! Mateusz Hołenko Obsługa plików, Procesy [4/40]

Deskryptory plików system plików przechowuje informacje o plikach w globalnej tablicy i-węzłów użytkownik odwołuje się do plików przez nazwy, systemu operacyjny przez indeks i-węzła w globalnej tablicy (identyfikator i-węzła, deskryptor pliku) każdy proces posiada lokalną tablicę i-węzłów (tablicę deskryptorów plików) zawierającą pliki skojarzone z procesem tablica jest niedostępna bezpośrednio dla programisty odwołuje się do niej przez wywołania funkcji systemowych domyślnie tablica zawiera trzy wpisy 0 stdin standardowe wejście 1 stdout standardowe wyjście 2 stderr standardowe wyjście diagnostyczne Mateusz Hołenko Obsługa plików, Procesy [5/40]

Deskryptory plików system plików przechowuje informacje o plikach w globalnej tablicy i-węzłów użytkownik odwołuje się do plików przez nazwy, systemu operacyjny przez indeks i-węzła w globalnej tablicy (identyfikator i-węzła, deskryptor pliku) każdy proces posiada lokalną tablicę i-węzłów (tablicę deskryptorów plików) zawierającą pliki skojarzone z procesem tablica jest niedostępna bezpośrednio dla programisty odwołuje się do niej przez wywołania funkcji systemowych domyślnie tablica zawiera trzy wpisy 0 stdin standardowe wejście 1 stdout standardowe wyjście 2 stderr standardowe wyjście diagnostyczne Mateusz Hołenko Obsługa plików, Procesy [5/40]

Deskryptory plików system plików przechowuje informacje o plikach w globalnej tablicy i-węzłów użytkownik odwołuje się do plików przez nazwy, systemu operacyjny przez indeks i-węzła w globalnej tablicy (identyfikator i-węzła, deskryptor pliku) każdy proces posiada lokalną tablicę i-węzłów (tablicę deskryptorów plików) zawierającą pliki skojarzone z procesem tablica jest niedostępna bezpośrednio dla programisty odwołuje się do niej przez wywołania funkcji systemowych domyślnie tablica zawiera trzy wpisy 0 stdin standardowe wejście 1 stdout standardowe wyjście 2 stderr standardowe wyjście diagnostyczne Mateusz Hołenko Obsługa plików, Procesy [5/40]

Operacje na plikach i deskryptorach Mateusz Hołenko Obsługa plików, Procesy [6/40]

Otwieranie i zamykanie plików otwieranie plików pathname nazwa pliku (wraz ze ścieżką) flags flagi otwarcia pliku, m.in.: O_WRONLY, O_RDONLY, O_RDWR, O_APPEND, O_CREAT, O_TRUNC mode prawa dostępu tworzonego pliku int open(const char* pathname, int flags) int open(const char* pathname, int flags, mode_t mode) zamykanie pliku fd deskryptor zamykanego pliku int close(int fd) Mateusz Hołenko Obsługa plików, Procesy [7/40]

Otwieranie i zamykanie plików otwieranie plików pathname nazwa pliku (wraz ze ścieżką) flags flagi otwarcia pliku, m.in.: O_WRONLY, O_RDONLY, O_RDWR, O_APPEND, O_CREAT, O_TRUNC mode prawa dostępu tworzonego pliku int open(const char* pathname, int flags) int open(const char* pathname, int flags, mode_t mode) zamykanie pliku fd deskryptor zamykanego pliku int close(int fd) Mateusz Hołenko Obsługa plików, Procesy [7/40]

Otwieranie i zamykanie plików przykładowy program #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <errno.h> int main(int argc, char* argv[]) { int fd; if (argc!= 2) { printf("usage: fexist [filepath]\n"); return 1; } fd = open(argv[1], O_RDONLY); if (fd == -1) { printf("couldn t open file %s (error code %d)\n", argv[1], errno); perror("opening file"); return 2; } else { printf("file %s opened successfully!\n", argv[1]); if (close(fd) == -1) { printf("couldn t close file %s (error code %d)\n", argv[1], errno); perror("closing file"); } } return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Mateusz Hołenko Obsługa plików, Procesy [8/40]

Odczyt i zapis danych odczyt danych z plików fd deskryptor pliku (uzyskany z funkcji open) buf adres początku obszaru pamięci, w którym zostaną umieszczone odczytane dane count liczba bajtów do odczytu ssize_t read(int fd, void* buf, size_t count) zapis danych do pliku fd deskryptor pliku (uzyskany z funkcji open) buf adres początku obszaru pamięci, zawierającego blok danych do zapisania count liczba bajtów do zapisania ssize_t write(int fd, const void* buf, size_t count) Mateusz Hołenko Obsługa plików, Procesy [9/40]

Odczyt i zapis danych odczyt danych z plików fd deskryptor pliku (uzyskany z funkcji open) buf adres początku obszaru pamięci, w którym zostaną umieszczone odczytane dane count liczba bajtów do odczytu ssize_t read(int fd, void* buf, size_t count) zapis danych do pliku fd deskryptor pliku (uzyskany z funkcji open) buf adres początku obszaru pamięci, zawierającego blok danych do zapisania count liczba bajtów do zapisania ssize_t write(int fd, const void* buf, size_t count) Mateusz Hołenko Obsługa plików, Procesy [9/40]

Odczyt i zapis danych przykładowy program... char buf[20]; int n; while ((n = read(fd, buf, 20)) > 0) { write(1, buf, n); }... 1 2 3 4 5 6 7 8 9 10 11 Mateusz Hołenko Obsługa plików, Procesy [10/40]

Przesuwanie wskaźnika bieżącej pozycji i skracanie przesuwanie wskaźnika fd deskryptor pliku (uzyskany z funkcji open) offset wielkość przesunięcia count odniesienie: SEEK_SET, SEEK_CUR, SEEK_END off_t lseek(int fd, off_t offset, int whence) skracanie pliku path nazwa pliku (wraz ze ścieżką) fd deskryptor pliku (uzyskany z funkcji open) length docelowa długość pliku int truncate(const char* path, off_t length) int ftruncate(int fd, off_t length) Mateusz Hołenko Obsługa plików, Procesy [11/40]

Przesuwanie wskaźnika bieżącej pozycji i skracanie przesuwanie wskaźnika fd deskryptor pliku (uzyskany z funkcji open) offset wielkość przesunięcia count odniesienie: SEEK_SET, SEEK_CUR, SEEK_END off_t lseek(int fd, off_t offset, int whence) skracanie pliku path nazwa pliku (wraz ze ścieżką) fd deskryptor pliku (uzyskany z funkcji open) length docelowa długość pliku int truncate(const char* path, off_t length) int ftruncate(int fd, off_t length) Mateusz Hołenko Obsługa plików, Procesy [11/40]

Tworzenie i usuwanie plików tworzenie pliku pathname nazwa pliku (wraz ze ścieżką) mode prawa dostępu tworzonego pliku int creat(const char* pathname, mode_t mode) usuwanie pliku pathname nazwa pliku (wraz ze ścieżką) int unlink(const char* pathname) Mateusz Hołenko Obsługa plików, Procesy [12/40]

Tworzenie i usuwanie plików tworzenie pliku pathname nazwa pliku (wraz ze ścieżką) mode prawa dostępu tworzonego pliku int creat(const char* pathname, mode_t mode) usuwanie pliku pathname nazwa pliku (wraz ze ścieżką) int unlink(const char* pathname) Mateusz Hołenko Obsługa plików, Procesy [12/40]

Operacje na deskryptorach tworzenie duplikatu deskryptora oldfd deskryptor do powielenia newfd numer nowo przydzielanego deskryptora int dup(int oldfd) int dup2(int oldfd, int newfd) Mateusz Hołenko Obsługa plików, Procesy [13/40]

Zadania Mateusz Hołenko Obsługa plików, Procesy [14/40]

Zadania Zadanie 1 Napisz program kopiujący zawartość pliku o nazwie podanej jako pierwszy parametr do pliku, którego nazwa podana jest jako drugi parametr. Zadanie 2 Napisz program zmieniający kolejność znaków w każdej linii pliku o nazwie podanej jako parametr. Zadanie 3 Napisz program wyszukujący najdłuższą linię w pliku i podający ilość znaków w tej linii. Mateusz Hołenko Obsługa plików, Procesy [15/40]

Zadania Zadanie 1 Napisz program kopiujący zawartość pliku o nazwie podanej jako pierwszy parametr do pliku, którego nazwa podana jest jako drugi parametr. Zadanie 2 Napisz program zmieniający kolejność znaków w każdej linii pliku o nazwie podanej jako parametr. Zadanie 3 Napisz program wyszukujący najdłuższą linię w pliku i podający ilość znaków w tej linii. Mateusz Hołenko Obsługa plików, Procesy [15/40]

Zadania Zadanie 1 Napisz program kopiujący zawartość pliku o nazwie podanej jako pierwszy parametr do pliku, którego nazwa podana jest jako drugi parametr. Zadanie 2 Napisz program zmieniający kolejność znaków w każdej linii pliku o nazwie podanej jako parametr. Zadanie 3 Napisz program wyszukujący najdłuższą linię w pliku i podający ilość znaków w tej linii. Mateusz Hołenko Obsługa plików, Procesy [15/40]

Zadania Zadanie 4 Napisz program określający rozmiar pliku/kilku plików o nazwach podanych jako parametry wejściowy. Zadanie 5 Napisz program wypisujący od końca zawartość pliku (1) znakami, (2) liniami. Mateusz Hołenko Obsługa plików, Procesy [16/40]

Zadania Zadanie 4 Napisz program określający rozmiar pliku/kilku plików o nazwach podanych jako parametry wejściowy. Zadanie 5 Napisz program wypisujący od końca zawartość pliku (1) znakami, (2) liniami. Mateusz Hołenko Obsługa plików, Procesy [16/40]

Procesy Mateusz Hołenko Obsługa plików, Procesy [17/40]

Procesy w systemie Linux Mateusz Hołenko Obsługa plików, Procesy [18/40]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Obsługa plików, Procesy [19/40]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Obsługa plików, Procesy [19/40]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Obsługa plików, Procesy [19/40]

Proces proces to nie program! pojęcie abstrakcyjne program w trakcie wykonywania procesami zarządza system operacyjny procesom przydzielane są zasoby systemowe procesor pamięć operacyjna urządzenia zewnętrzne Mateusz Hołenko Obsługa plików, Procesy [19/40]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Obsługa plików, Procesy [20/40]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Obsługa plików, Procesy [20/40]

Procesy macierzyste i potomne procesy tworzą hierarchię proces główny nazywa się init proces tworzący inne procesy staje się dla nich rodzicem (procesem macierzystym) wynik polecenia ps l a (PID identyfikator procesu, PPID identyfikator rodzica procesu) F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND... 0 0 1773 1 20 0 6196 644 n_tty_ Ss+ tty1 0 :00 / sbin / getty... tty1 0 1000 2090 2028 20 0 26188 6532 wait Ss pts /0 0 :00 / bin / bash 0 1000 32096 2090 20 0 10660 1156 R+ pts /0 0 : 00 ps l a Mateusz Hołenko Obsługa plików, Procesy [20/40]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Obsługa plików, Procesy [21/40]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Obsługa plików, Procesy [21/40]

Procesy zombie i sieroty procesy mogą kończyć swoje działanie w różnej kolejności procesy sieroty (ang. orphan) proces macierzysty się zakończył procesem macierzystym staje się init procesy zombie (ang. zombie) proces zakończył się, ale czeka na przekazanie statusu zakończenia nie zajmuje procesora ani innych zasobów występuje w tablicy procesów (tam znajduje się bowiem status zakończenia procesu) Mateusz Hołenko Obsługa plików, Procesy [21/40]

Funkcje systemowe Mateusz Hołenko Obsługa plików, Procesy [22/40]

Pobieranie identyfikatorów identyfikator procesu PID pid_t getpid(void) identyfikator rodzica procesu PPID pid_t getppid(void) Mateusz Hołenko Obsługa plików, Procesy [23/40]

Pobieranie identyfikatorów identyfikator procesu PID pid_t getpid(void) identyfikator rodzica procesu PPID pid_t getppid(void) Mateusz Hołenko Obsługa plików, Procesy [23/40]

Tworzenie procesów potomnych tworzenie procesu potomnego pid_t fork(void) przykład zastosowania #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek programu\n"); if (fork() == 0) { printf("tutaj pisze proces potomny!\n"); } else { printf("tutaj pisze proces macierzysty!\n"); } printf("tutaj piszą oba procesy!\n"); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Obsługa plików, Procesy [24/40]

Tworzenie procesów potomnych tworzenie procesu potomnego pid_t fork(void) przykład zastosowania #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek programu\n"); if (fork() == 0) { printf("tutaj pisze proces potomny!\n"); } else { printf("tutaj pisze proces macierzysty!\n"); } printf("tutaj piszą oba procesy!\n"); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Obsługa plików, Procesy [24/40]

Uruchamianie programu w ramach procesu rodzina funkcji exec int execl(const char *path, const char *arg,...) int execlp(const char *file, const char *arg,...) int execle(const char *path, const char *arg,..., char *const envp[]) int execv(const char *path, char *const argv[]) int execvp(const char *file, char *const argv[]) int execve(const char *file, char *const argv[], char *const envp[]) poprawne wykonanie funkcji exec powoduje bezpowrotną zmianę wykonywanego programu! sugerowane wykorzystanie w połączeniu z funkcją fork Mateusz Hołenko Obsługa plików, Procesy [25/40]

Uruchamianie programu w ramach procesu rodzina funkcji exec int execl(const char *path, const char *arg,...) int execlp(const char *file, const char *arg,...) int execle(const char *path, const char *arg,..., char *const envp[]) int execv(const char *path, char *const argv[]) int execvp(const char *file, char *const argv[]) int execve(const char *file, char *const argv[], char *const envp[]) poprawne wykonanie funkcji exec powoduje bezpowrotną zmianę wykonywanego programu! sugerowane wykorzystanie w połączeniu z funkcją fork Mateusz Hołenko Obsługa plików, Procesy [25/40]

Kończenie i zabijanie procesu zakończenie działania procesu i zwrócenie statusu zakończenia status status zakończenia procesu proces zakończony poprawnie: 0 błąd: inna wartość void exit(int status) zabicie procesu potomnego pid identyfikator procesu, który ma zostać zabity (patrz man 2 kill!) sig numer sygnału wysyłany do procesu potomnego int kill(pid_t pid, int sig) Mateusz Hołenko Obsługa plików, Procesy [26/40]

Kończenie i zabijanie procesu zakończenie działania procesu i zwrócenie statusu zakończenia status status zakończenia procesu proces zakończony poprawnie: 0 błąd: inna wartość void exit(int status) zabicie procesu potomnego pid identyfikator procesu, który ma zostać zabity (patrz man 2 kill!) sig numer sygnału wysyłany do procesu potomnego int kill(pid_t pid, int sig) Mateusz Hołenko Obsługa plików, Procesy [26/40]

Synchronizacja procesów synchronizacja procesu macierzystego i potomnego status adres komórki pamięci, do którego zapisany zostanie status zakończenia procesu potomnego pid identyfikator procesu, na którego zakończenie funkcja ma oczekiwać (patrz man 2 wait!) options opcje określające sposób zakończenia funkcji pid_t wait(int* status) pid_t waitpid(pid_t pid, int* status, int options) Mateusz Hołenko Obsługa plików, Procesy [27/40]

Przykład wykorzystania funkcji exec #include <unistd.h> #include <stdio.h> int main(int argc, char* argv[]) { printf("początek działania programu\n"); if (fork() == 0) { execlp("ls", "ls", "-a", NULL); perror("błąd uruchamiania programu!"); exit(1); } wait(null); printf("koniec działania programu\n"); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Mateusz Hołenko Obsługa plików, Procesy [28/40]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Obsługa plików, Procesy [29/40]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Obsługa plików, Procesy [29/40]

Przekierowywanie strumieni wejściowych/wyjściowych proces potomny dziedziczy tablicę otwartych deskryptorów przekierowania procesów ustawione przed wywołaniem funkcji fork obowiązują również w procesie potomnym! przykładowy program #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { dup2(creat("ls-out", 0600), 1); execvp("ls", argv); } 1 2 3 4 5 6 7 8 9 Mateusz Hołenko Obsługa plików, Procesy [29/40]

Zadania teoretyczne Mateusz Hołenko Obsługa plików, Procesy [30/40]

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork() == 0) fork(); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Mateusz Hołenko Obsługa plików, Procesy [31/40]

Odpowiedź @-----------------------------------+ @-----------------+ @-----------------+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @-----+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Mateusz Hołenko Obsługa plików, Procesy [32/40]

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <stdlib.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork()!= 0) exit(0); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Mateusz Hołenko Obsługa plików, Procesy [33/40]

Odpowiedź @-----------------------------------+ @-----------------+ @-----------------+ @-----+ @-----+ @-----+ @-----+ x @-----+ x @-----+ x @-----+ x @-----+ 1 2 3 4 5 6 7 8 Mateusz Hołenko Obsługa plików, Procesy [34/40]

Ile procesów zostanie stworzonych? #include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <stdlib.h> int main(int argc, char* argv[]) { fork(); fork(); if(fork()!= 0) if(fork() == 0) fork(); else exit(0); fork(); } return 0; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Mateusz Hołenko Obsługa plików, Procesy [35/40]

Odpowiedź @----------------------------------------+ @-----------------------------------+ @-----------------------------------+ @--------------+ @--------------+ @--------------+ @--------------+ @--+ @--+ @--+ @--+ x @-----+ x @-----+ x @-----+ x @-----+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ @--+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Mateusz Hołenko Obsługa plików, Procesy [36/40]

Zadania praktyczne Mateusz Hołenko Obsługa plików, Procesy [37/40]

Zadania Zadanie 1 Napisz program tworzący dwa procesy. Każdy ze stworzonych procesów powinien utworzyć proces potomka. Należy wyświetlać identyfikatory procesów rodziców i potomków po każdym wywołaniu funkcji fork. Zadanie 2 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję fork i wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Mateusz Hołenko Obsługa plików, Procesy [38/40]

Zadania Zadanie 1 Napisz program tworzący dwa procesy. Każdy ze stworzonych procesów powinien utworzyć proces potomka. Należy wyświetlać identyfikatory procesów rodziców i potomków po każdym wywołaniu funkcji fork. Zadanie 2 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję fork i wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Mateusz Hołenko Obsługa plików, Procesy [38/40]

Zadania Zadanie 3 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję exec powodującą wydruk zawartości bieżącego katalogu i następnie wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Zadanie 4 Napisz program którego rezultatem będzie wydruk zawartości bieżącego katalogu poprzedzony napisem Poczatek a zakończony napisem Koniec. Mateusz Hołenko Obsługa plików, Procesy [39/40]

Zadania Zadanie 3 Napisz program wypisujący napis Poczatek, następnie wywołujący funkcję exec powodującą wydruk zawartości bieżącego katalogu i następnie wypisujący napis Koniec. Co jest efektem uruchomienia tego programu? Zadanie 4 Napisz program którego rezultatem będzie wydruk zawartości bieżącego katalogu poprzedzony napisem Poczatek a zakończony napisem Koniec. Mateusz Hołenko Obsługa plików, Procesy [39/40]

Zadania Zadanie 5 Napisz program, którego wynikiem jest sformatowana lista procesów: poczatek listy proces 1 proces2... koniec listy Zadanie 6 Napisz program tworzący równocześnie trzy procesy zombi. Mateusz Hołenko Obsługa plików, Procesy [40/40]

Zadania Zadanie 5 Napisz program, którego wynikiem jest sformatowana lista procesów: poczatek listy proces 1 proces2... koniec listy Zadanie 6 Napisz program tworzący równocześnie trzy procesy zombi. Mateusz Hołenko Obsługa plików, Procesy [40/40]