Procesy i potoki. S. Samolej: Procesy
|
|
- Maciej Domański
- 10 lat temu
- Przeglądów:
Transkrypt
1 Procesy i potoki dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: oraz Na materiałach opracowanych przez dr inż. Jędrzeja Ułasiewicza: jedrzej.ulasiewicz.staff.iiar.pwr.wroc.pl S. Samolej: Procesy 1
2 Plan zajęć Wykład Wprowadzenie do zagadnień współbieżności Programowanie wieloprocesowe i wielowątkowe Rozwiązania klasycznych problemów współbieżności: producentkonsument, czytelnicy i pisarze, 5 ucztujących filozofów Programowanie aplikacji rozproszonych Klastry komputerowe (dr inż. Tomasz Rak) Programowanie aplikacji współbieżnych i rozproszonych w Java, obliczenia w Grid i Cloud (dr inż. Wojciech Rząsa) Laboratorium Analiza i programowanie wybranych aplikacji współbieżnych i rozproszonych S. Samolej: Wprowadzenie do prog. wspólbieżnego i rozproszonego 2
3 Zasady zaliczenia Uzyskanie pozytywnej oceny z laboratorium (sprawdziany) Zdanie egzaminu S. Samolej: Wprowadzenie do prog. wspólbieżnego i rozproszonego 3
4 LITERATURA Linux : programowanie / Neil Matthew, Richard Stones, RM, 1999 Linux. Niezbędnik programisty/ John Fusco, Helion 2009 Zaawansowane programowanie w systemie Linux / Neil Matthew, Richard Stones, Helion, 2002 Systemy czasu rzeczywistego QNX6 Neutrino / Jędrzej Ułasiewicz, Wydawnictwo btc, Programowanie w Linuksie / K. Kuźniar, K. Lal, T. Rak, Helion, 2012 Podstawy programowania współbieżnego i rozproszonego / Mordechai Ben-Ari, WNT, 2009 Java 2. Techniki zaawansowane. Wydanie II /Cay Horstmann, Gary Cornell, Helion, 2005 Modele i metody inżynierii oprogramowania systemów czasu rzeczywistego/ T. Szmuc, Uczelniane Wydawnictwa Naukowo- Dydaktyczne AGH, Kraków 2001 S. Samolej: Wprowadzenie do prog. współbieżnego i rozproszonego 4
5 Co nas będzie interesowało? Program współbieżny składa się z kilku (co najmniej dwóch) współbieżnych procesów sekwencyjnych, które muszą się ze sobą komunikować lub synchronizować swoje działania. Nie interesują nas procesy rozłączne, czyli takie które działają niezależnie od siebie, nie wymagając żadnych działań synchronizacyjnych ani nie wymieniając między sobą danych. Zajmiemy się omówieniem mechanizmów udostępnianych przez systemy operacyjne do synchronizacji procesów. Zwrócimy uwagę na pułapki, w jakie może wpaść programista. S. Samolej: Wprowadzenie do prog. wspólbieżnego i rozproszonego 5
6 Synchronizacja i komunikacja Poprawne zachowanie programu współbieżnego zależy od synchronizacji i komunikacji pomiędzy procesami Synchronizacja to wypełnienie ograniczeń dotyczących kolejności wykonywania pewnych akcji przez procesy (np. pewna akcja wykonywana przez jeden proces może nastąpić tylko wtedy, gdy pewna inna akcja została wykonana w innym procesie) Komunikacja to przekazywanie informacji od jednego procesu do innego Te dwa pojęcia są ze sobą splecione ponieważ komunikacja nie może się odbyć bez synchronizacji, a synchronizacja może być potraktowana jako komunikacja bez wymiany danych Wymiana danych jest zwykle oparta na współdzieleniu zmiennych albo przekazywaniu wiadomości S. Samolej: Wprowadzenie do prog. wspólbieżnego i rozproszonego 6
7 Proces Proces to przestrzeń adresowa i pojedynczy wątek sterujący, który działa w tej przestrzeni, oraz potrzebne do tego zasoby systemowe Minimalne zasoby do wykonywania się procesu to: Procesor Pamięć Urządzenia wejścia-wyjścia W systemach wielozadaniowych w istocie każda instancja działającego programu jest procesem. S. Samolej: Procesy 7
8 Przypomnienie uruchomienie procesu Podczas uruchamiania programu w systemie operacyjnym następuje przeniesienie kodu programu z jakiegoś nośnika (najczęściej systemu plików) do pamięci operacyjnej. Kod programu jest otaczany pewnymi strukturami danych identyfikującymi go na czas wykonywania i zapewniającymi jego ochronę (tzw. blok kontrolny procesu). Następuje także powiązanie (planowanie przydziału) z programem zasobów systemu mikroprocesorowego, z których będzie korzystał. Zasobami przyszłego procesu są czas procesora, pamięć, system plików oraz urządzenia wejścia-wyjścia. Tak przygotowany do wykonywania program staje się procesem, który jest gotowy do wykonywania. S. Samolej: Procesy 8
9 Przypomnienie podstawowe stany procesu 1. Utworzenie procesu 2. Proces żąda zasobu, który nie jest dostępny 3. Wystąpiło przerwanie (wywłaszczenie) lub proces zwolnił procesor dobrowolnie 4. Proces został wybrany do wykonywania 5. Potrzebny zasób został zwolniony (przerwanie wej/wyj lub inicjatywa bieżącego procesu) 6. Zakończenie procesu S. Samolej: Procesy 9
10 Przypomnienie struktury danych powiązane z procesem Segment kodu instrukcje programu Segment danych statyczne dane programu Segment stosu zmienne chwilowe Segment sterty zmienne chwilowe jawnie alokowane i zwalniane przez programistę Blok kontrolny procesu dane które o procesie przechowuje system operacyjny S. Samolej: Procesy 10
11 Przypomnienie blok kontrolny procesu Identyfikator procesu (PID, grupa procesów) Uwierzytelnienia (id. użytkownika i grupy) Indywidualność (dot. biblioteki emulacji) Wektor argumentów (parametry wywołania programu) Wektor środowiska (zmienne NAZWA=WARTOŚĆ) Kontekst planowania: rejestry, priorytety, nie obsłużone sygnały Informacje rozliczeniowe Tablica plików Tablica obsługi sygnałów Kontekst pamięci wirtualnej Tożsamość procesu Środowisko procesu (dziedziczone od rodzica) Kontekst procesu S. Samolej: Procesy 11
12 Drzewo procesów Procesy tworzą drzewo Każdy proces ma dokładnie jeden proces rodzic Procesy mogą posiadać wiele procesów-dzieci S. Samolej: Procesy 12
13 Polecenia Linux zarządzające procesami ps pobieranie informacji o aktywnych procesach ps ef wszystkie procesy w systemie ps axjf drzewo procesów ps slf informacja o wątkach top dynamiczna lista aktywnych procesów w systemie pstree drzewo procesów w systemie monitor systemu nice uruchomienie programu z zadanym priorytetem renice zmiana priorytetu uruchomionego procesu kill przesłanie sygnału do procesu pracującego w systemie operacyjnym S. Samolej: Procesy 13
14 Interpretacja kolumn polecenia PS UID identyfikator użytkownika procesu PID numer procesu w systemie PPID numer rodzica procesu C- stopień wykorzystania procesora STIME czas uruchomienia TTY konsola, z której uruchomiono proces TIME wykorzystany do tej pory czas procesora COMMAND polecenie, które uruchomiło proces STAT status: S-sleep, R-running, S. Samolej: Procesy 14
15 Funkcje informujące i zarządzające procesami Funkcja pid_t getpid(void); pid_t getppid(void); unsigned int sleep(unsigned int seconds); int pause(void); Opis Zwróć swój identyfikator procesu Zwróć identyfikator procesu macierzystego Uśpij bieżący wątek/proces na zadaną ilość sekund Zatrzymaj wykonywanie programu do momentu, gdy otrzyma on sygnał, który go zabije lub który zostanie obsłużony S. Samolej: Procesy 15
16 Duplikowanie procesu (1) #include <sys/types.h> #include <unistd.h> pid_t fork(void); pid_t new_pid; new_pid = fork(); switch(new_pid) { case -1 : /* Error */ break; case 0 : /* We are child */ break; default : /* We are parent */ break; S. Samolej: Procesy 16
17 Duplikowanie procesu (2) Wywołanie systemowe tworzy nowy proces potomny, który jest identyczny z procesem wywołującym, ale posiada unikatowy PID, a jego PPID jest ustawiany na proces wywołujący. Nowy proces wywołujący dziedziczy po procesie macierzystym Przestrzeń danych (zmienne) Otwarte deskryptory i strumienie katalogowe Wywołanie fork w procesie macierzystym zwraca PID nowego procesu potomnego Nowy proces pracuje dokładnie tak samo, jak oryginał, ale w procesie potomnym fork zwraca zero (dzięki temu procesy mogą rozróżnić, który jest który) S. Samolej: Procesy 17
18 Duplikowanie procesu przykładowa aplikacja #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { pid_t pid; int n; char *message; printf( fork program starting\n ); pid = fork(); switch(pid) { case -1: perror( fork failed ); exit(1); case 0: message = This is the child ; n = 5; default: for(; n > 0; n--) { puts(message); sleep(1); exit(0); break; message = This is the parent ; n = 3; break; S. Samolej: Procesy 18
19 Rezultat działania programu $./fork1 fork program starting This is the parent This is the child This is the parent This is the child This is the parent This is the child $ This is the child This is the child Program działa jako 2 procesy Proces potomny wysyła komunikat 5 razy, macierzysty -3 Proces macierzysty kończy działanie przed zakończeniem procesu dziecka W komunikaty wmieszał się znak powłoki S. Samolej: Procesy 19
20 Oczekiwanie na proces (1) #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *stat_val); Gdy proces potomny nie zakończył się funkcja wait powoduje zablokowanie procesu macierzystego aż do zakończenia się procesu potomnego. Gdy ten się zakończy zwracany jest jego PID oraz status Gdy proces potomny zakończył się zanim wykonano funkcję wait nie występuje blokada procesu macierzystego. Funkcja zwraca PID zakończonego procesu oraz jego status Gdy brak jakichkolwiek procesów potomnych funkcja wait zwraca 1. S. Samolej: Procesy 20
21 Odczytywanie statusu przechwyconego przez funkcję wait Makro WIFEXITED(stat_val) WEXITSTATUS(stat_val) WIFSIGNALED(stat_val) WTERMSIG(stat_val) WIFSTOPPED(stat_val) WSTOPSIG(stat_val) Definicja Niezerowe, jeśli proces potomny normalnie zakończył pracę Jeśli WIFEXITED jest niezerowe, zwraca kod wyjściowy procesu potomnego Niezerowe, jeśli proces potomny zakończył pracę po otrzymaniu nie przechwyconego sygnału Jeśli WIFSIGNALED jest niezerowe, zwraca numer sygnału Niezerowe, jeśli proces potomny zatrzymał się po otrzymaniu sygnału Jeśli WIFSTOPPED jest niezerowe, zwraca numer sygnału S. Samolej: Procesy 21
22 Zastosowanie wait przykładowa aplikacja #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdio.h> int main() { pid_t pid; char *message; int n; int exit_code; printf( fork program starting\n ); pid = fork(); switch(pid) { case -1: perror( fork failed ); exit(1); case 0: message = This is the child ; n = 5; exit_code = 37; break; default: message = This is the parent ; n = 3; exit_code = 0; break; for(; n > 0; n--) { puts(message); sleep(1); if (pid!= 0) { int stat_val; pid_t child_pid; child_pid = wait(&stat_val); printf( Child has finished: PID = %d\n, child_pid); if(wifexited(stat_val)) printf( Child exited with code %d\n, WEXITSTATUS(stat_val)); else printf( Child terminated abnormally\n ); exit(exit_code); S. Samolej: Procesy 22
23 $./wait fork program starting This is the child This is the parent This is the parent This is the child This is the parent This is the child This is the child This is the child Child has finished: PID = 1582 Child exited with code 37 $ Rezultat programu Proces macierzysty korzysta z wywołania wait i zawiesza swoje działanie Kiedy zostaje wywołane exit w programie potomnym program macierzysty wznawia pracę Program macierzysty przechwytuje wartość zwracaną przez wait i informuje o statusie zakończenia procesu potomnego S. Samolej: Procesy 23
24 Procesy zombi Kiedy proces potomny kończy pracę, jego powiązanie z procesem macierzystym jest podtrzymywane, dopóki ten nie zakończy działania albo nie wykona wait Proces potomny nie jest już aktywny, ale pozostaje po nim wpis w tablicach opisu procesów S. Samolej: Procesy 24
25 Wprowadzenie procesu zombie przykładowa aplikacja #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { pid_t pid; int n; char *message; printf( fork program starting\n ); pid = fork(); switch(pid) { case -1: perror( fork failed ); exit(1); case 0: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 004 S wait4 pts/2 00:00:00 su 000 S schedu pts/1 00:00:01 emacs 000 S schedu pts/1 00:00:00 fork2 003 Z do_exi pts/1 00:00:00 fork2 <defunct> 000 R pts/1 00:00:00 ps message = This is the child ; n = 3; break; default: message = This is the parent ; n = 5; break; for(; n > 0; n--) {puts(message); sleep(1); exit(0); Gdy proces macierzysty zakończy swoją pracę nieprawidłowo, proces potomny otrzyma proces macierzysty z identyfikatorem 1 (init). S. Samolej: Procesy 25
26 Oczekiwanie na określony proces #include <sys/types.h> #include <sys/wait.h> pid_t waitpid(pid_t pid, int *stat_loc, int options); Wywołanie funkcji waitpid z parametrami: waitpid(child_pid, (int *) 0, WNOHANG); pozwala na monitorowanie stanu procesu potomnego. Funkcja zwróci: 0 jeśli proces potomny nie zakończył pracy PID potomka, jeśli proces potomny zakończy pracę normalnie -1 i ustawi errno, gdy zostanie wykryty błąd S. Samolej: Procesy 26
27 Użycie fork do utworzenia 2 procesów potomnych Kod wspólny if(fork() == 0) { Kod procesu potomnego P2 exit(0); if(fork() == 0) { Kod procesu potomnego P3 exit(0); Kod procesu macierzystego P1 S. Samolej: Procesy 27
28 Użycie fork do tworzenia kaskady procesów potomnych Kod wspólny if(fork() == 0) { if(fork() == 0 { Kod procesu potomnego P3 else { Kod procesu potomnego P2 Kod procesu macierzystego P1 S. Samolej: Procesy 28
29 Pliki W Linuksie wszystko jest plikiem (prawie) Dostęp do większości urządzeń (plików dyskowych, drukarek, konsoli, portów szeregowych i wielu innych) jest taki sam i odbywa się jak dostęp do plików Nieco inaczej odbywa się dostęp do sieci (gniazda) W dostępie do wymienionych urządzeń można się posłużyć zbiorem tzw. niskopoziomowych funkcji dostępu do plików: open, close, read, write i ioctl. S. Samolej: Pliki, potoki, sygnały 29
30 Specjalne pliki /dev/console /dev/tty /dev/null domyślna konsola terminal puste urządzenie S. Samolej: Pliki, potoki, sygnały 30
31 Podstawowe funkcje niskiego poziomu do obsługi plików i urządzeń open: otwórz plik lub urządzenie read: czytaj z otwartego pliku lub urządzenia write: zapisz coś do otwartego urządzenia lub pliku close: zamknij plik lub urządzenie ioctl: przekaż informacje sterujące do sterownika urządzenia S. Samolej: Pliki, potoki, sygnały 31
32 Domyślne deskryptory plików Każdy uruchomiony program ma powiązane ze sobą deskryptory plików. Domyślnie są to: 0: standardowe wejście 1: standardowe wyjście 2: standardowe błędy S. Samolej: Pliki, potoki, sygnały 32
33 write() #include <unistd.h> size_t write(int fildes, const void *buf, size_t nbytes); fildes deskryptor pliku (uzyskany z open) buf bufor z danymi do zapisu nbytes ilość danych do zapisu Funkcja zwraca ilość zapisanych bajtów, 0 gdy koniec pliku, -1 gdy błąd Przykład: #include <unistd.h> #include <stdlib.h> int main() { if ((write(1, Here is some data\n, 18))!= 18) write(2, A write error has occurred on file descriptor 1\n,46); exit(0); $ simple_write Here is some data $ S. Samolej: Pliki, potoki, sygnały 33
34 read() #include <unistd.h> size_t read(int fildes, void *buf, size_t nbytes); fildes deskryptor pliku buf bufor na dane nbytes maksymalna ilość bajtów do odczytania Funkcja zwraca ile bajtów odczytała, 0-nic nie przeczytano koniec pliku, -1 błąd. #include <unistd.h> #include <stdlib.h> int main() { char buffer[128]; int nread; nread = read(0, buffer, 128); if (nread == -1) write(2, A read error has occurred\n, 26); if ((write(1,buffer,nread))!= nread) write(2, A write error has occurred\n,27); exit(0); Przekierowanie strumienia wyjściowego jednego polecenia na drugie $ echo hello there simple_read hello there $ simple_read < draft1.txt Files In this chapter we will be looking at files and directories and how to manipulate them. We will learn how to create files, o$ S. Samolej: Pliki, potoki, sygnały 34
35 open() #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int open(const char *path, int oflags); int open(const char *path, int oflags, mode_t mode); oflags: Tryb O_RDONLY O_WRONLY O_RDWR O_APPEND O_CREAT O_EXCL Opis Otwórz tylko do odczytu Otwórz tylko do zapisu Otwórz do zapisu i odczytu Ustaw się na końcu pliku Utwórz plik jeśli potrzeba W połączeniu z O_CREAT zapewnia, że tylko wywołujący utworzy plik przykład: path ścieżka dostępu do pliku mode: S_IRUSR: prawo czytania, właściciel S_IWUSR: prawo pisania, właściciel S_IXUSR: prawo wykonywania, właściciel S_IRGRP: prawo czytania, grupa S_IWGRP: prawo pisania, grupa S_IXGRP: prawo wykonywania, grupa S_IROTH: prawo czytania, inni S_IWOTH: prawo pisania, inni S_IXOTH: prawo wykonywania, inni open ( myfile, O_CREAT, S_IRUSR S_IXOTH); S. Samolej: Pliki, potoki, sygnały 35
36 close()/ ioctl() #include <unistd.h> int close(int fildes); #include <unistd.h> int ioctl(int fildes, int cmd,...); Wykonaj komendę cmd na pliku wskazywanym Przez fildes uwzględniając ew. dodatkowe parametry. S. Samolej: Pliki, potoki, sygnały 36
37 Przykład zastosowania #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> int main() { char c; int in, out; in = open( file.in, O_RDONLY); out = open( file.out, O_WRONLY O_CREAT, S_IRUSR S_IWUSR); while(read(in,&c,1) == 1) write(out,&c,1); exit(0); S. Samolej: Pliki, potoki, sygnały 37
38 Standardowa biblioteka wejścia-wyjścia - przypomnienie fopen, fclose fread, fwrite fflush fseek fgetc, getc, getchar fputc, putc, putchar fgets, gets printf, fprintf, and sprintf scanf, fscanf, and sscanf #include <stdio.h> #include <stdlib.h> int main() { int c; FILE *in, *out; in = fopen( file.in, r ); out = fopen( file.out, w ); while((c = fgetc(in))!= EOF) fputc(c,out); exit(0); S. Samolej: Pliki, potoki, sygnały 38
39 Definicja potoku Terminu potok (pipe) używa się na określenie przepływu danych z jednego procesu do innego. Można powiedzieć, że potoki łączą wyjście jednego procesu z wejściem innego. Istnieje możliwość wywołania polecenia powłoki, które wiąże: Standardowe wejście polecenia2 z klawiaturą terminala Standardowe wyjście polecenia2 ze standardowym wejściem polecenia1 Standardowe wyjście polecenie1 z ekranem komputera: polecenie2 polecenie1 S. Samolej: Pliki, potoki, sygnały 39
40 Przykład do przetestowania potoków ustalonych z linii poleceń // polecenie2 #include <stdio.h> #include <stdlib.h> int main() { printf("hello world!\n"); return 0; // polecenie1 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char txt[100]; int i=0; gets(txt); while(txt[i]!=0) { txt[i]=toupper(txt[i]); i++; puts(txt); return 0; S. Samolej: Pliki, potoki, sygnały 40
41 Funkcja pipe (potok nie nazwany) #include <unistd.h> int pipe(int file_descriptor[2]); Udostępnia ona taki mechanizm przekazywania danych pomiędzy dwoma programami, który nie wymaga uruchomienia powłoki w celu interpretacji żądanego polecenia Do pipe przekazywana jest tablica (wskaźnik do tablicy) dwóch liczb całkowitych będących deskryptorami plików. Funkcja wypełnia tablicę dwoma nowymi deskryptorami plików i zwraca zero w przypadku błędy zwraca -1 i ustawia zmienną errno. Dwa zwrócone deskryptory plików są połączone w specjalny sposób. Wszystkie dane zapisane do file_descriptor[1], mogą być odczytane przez file_descriptor[0]. Dane są przetwarzane według zasady FIFO Przesyłanie danych z i do takiego potoku musi się odbywać z zastosowaniem funkcji read, write a nie fread, fwrite. S. Samolej: Pliki, potoki, sygnały 41
42 Pierwsze zastosowanie funkcji pipe #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { int data_processed; int file_pipes[2]; const char some_data[] = 123 ; char buffer[bufsiz + 1]; memset(buffer, \0, sizeof(buffer)); if (pipe(file_pipes) == 0) { data_processed = write(file_pipes[1], some_data, strlen(some_data)); printf( Wrote %d bytes\n, data_processed); data_processed = read(file_pipes[0], buffer, BUFSIZ); printf( Read %d bytes: %s\n, data_processed, buffer); exit(exit_success); exit(exit_failure); $./pipe1 Wrote 3 bytes Read 3 bytes: 123 S. Samolej: Pliki, potoki, sygnały 42
43 Potoki i fork #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { int data_processed; int file_pipes[2]; const char some_data[] = 123 ; char buffer[bufsiz + 1]; pid_t fork_result; memset(buffer, \0, sizeof(buffer)); if (pipe(file_pipes) == 0) { fork_result = fork(); if (fork_result == -1) { fprintf(stderr, Fork failure ); exit(exit_failure); if (fork_result == 0) { data_processed = read(file_pipes[0], buffer, BUFSIZ); printf( Read %d bytes: %s\n, data_processed, buffer); exit(exit_success); else { data_processed = write(file_pipes[1], some_data,strlen(some_data)); printf( Wrote %d bytes\n, data_processed); exit(exit_success); $./pipe2 Wrote 3 bytes Read 3 bytes: 123 S. Samolej: Pliki, potoki, sygnały 43
44 Jak to działa? Najpierw program tworzy potok, używając funkcji pipe Po sprawdzeniu, że funkcja fork zakończyła się pomyślnie proces macierzysty zapisuje dane do potoku, a proces potomny je odczytuje Proces macierzysty i potomny kończą pracę po pojedynczym wykonaniu instrukcji write/read Proces potomny dziedziczy w momencie wykonywania funkcji fork utworzone deskryptory plików Uzyskano możliwość przekazywania danych pomiędzy procesami. S. Samolej: Pliki, potoki, sygnały 44
45 Czytanie zamkniętych potoków Zwykle dane z potoków odczytuje się porcjami w pętli Funkcja read blokuje proces oczekuje aż będą dostępne następne dane Może się okazać, że potok od strony nadawcy zostaje zamknięty Wtedy funkcja read zwraca 0 (-1, gdy wykryto błąd otwarcia pliku) i program może zapobiec blokowaniu Jeśli korzystamy z potoku utworzonego dla dwu procesów z zastosowaniem funkcji fork, to w programie istnieją 2 deskryptory plików do zapisu w potoku. Abu potok uznał, że jest zamknięty oba z nich muszą zostać zamknięte. S. Samolej: Pliki, potoki, sygnały 45
46 Zamykanie nienazwanych potoków - przykład #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int main(int argc, char *argv[]) { int pipefd[2]; pid_t cpid; char buf; if (argc!= 2) { fprintf(stderr, "Usage: %s <string>\n", argv[0]); exit(exit_failure); if (pipe(pipefd) == -1) { perror("pipe"); exit(exit_failure); cpid = fork(); if (cpid == -1) { perror("fork"); exit(exit_failure); if (cpid == 0) { /* Child reads from pipe */ close(pipefd[1]); /* Close unused write end */ while (read(pipefd[0], &buf, 1) > 0) write(stdout_fileno, &buf, 1); write(stdout_fileno, "\n", 1); close(pipefd[0]); _exit(exit_success); else { /* Parent writes argv[1] to pipe */ close(pipefd[0]); /* Close unused read end */ write(pipefd[1], argv[1], strlen(argv[1])); close(pipefd[1]); /* Reader will see EOF */ wait(null); /* Wait for child */ exit(exit_success); S. Samolej: Pliki, potoki, sygnały 46
47 Nazwane potoki: FIFO Umożliwiają komunikację pomiędzy procesami, które nie są ze sobą spokrewnione Są specjalnym rodzajem pliku, który istnieje w systemie plików, ale zachowuje się jak nie nazwane potoki, które były omawiane do tej pory Polecenie systemowe tworzące nazwany potok: mkfifo filename Z poziomu programu można utworzyć nazwany potok z zastosowaniem funkcji: #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *filename, mode_t mode); int mknod(const char *filename, mode_t mode S_IFIFO, (dev_t) 0); S. Samolej: Pliki, potoki, sygnały 47
48 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> int main() { int res = mkfifo( /tmp/my_fifo, 0777); if (res == 0) printf( FIFO created\n ); exit(exit_success); Tworzenie nazwanego potoku ubuntu@ubuntu:~$ mkfifo /tmp/fifo1 ubuntu@ubuntu:~$ cat < /tmp/fifo1 & [1] ubuntu@ubuntu:~$ echo "Ala ma kota" > /tmp/fifo1 ubuntu@ubuntu:~$ Ala ma kota [1]+ Done cat < /tmp/fifo1 S. Samolej: Pliki, potoki, sygnały 48
49 Otwieranie FIFO funkcją open open(const char *path, O_RDONLY); Open się zablokuje, to znaczy nie powróci, dopóki inny proces nie otworzy tego samego potoku do zapisu open(const char *path, O_RDONLY O_NONBLOCK); Funkcja open zakończy się teraz pomyślnie i natychmiast powróci, nawet jeśli żaden proces nie otworzy FIFO do zapisu open(const char *path, O_WRONLY); W tym przypadku funkcja open zablokuje się, dopóki inny proces nie otworzy tego samego FIFO do odczytu open(const char *path, O_WRONLY O_NONBLOCK); To wywołanie zawsze natychmiast wraca, ale jeśli wcześniej żaden proces nie otworzył FOFO do odczytu, open zwróci -1 i FIFO nie zostanie otwarte. Funkcja open może zostać zastosowana do synchronizacji pracy procesów. S. Samolej: Pliki, potoki, sygnały 49
50 FIFO: odczyt i zapis Użycie trybu O_NONBLOCK ma wpływ na zachowanie funkcji write i read. Odczyt (read) z pustego, blokującego się FIFO (otwartego bez znacznika O_NONBLOCK) będzie oczekiwał, aż będzie można odczytać jakieś dane, natomiast odczyt z nieblokującego się FIFO, w którym nie ma żadnych danych, zwróci 0. Zapis (write) do pełnego, blokującego się FIFO będzie oczekiwał, aż można będzie zapisać dane. Zapis do FIFO, które nie może przyjąć wszystkich bajtów, może zadziałać na 2 sposoby: Spowodować błąd, ponieważ nie można przesłać wszystkich danych Zapisać część danych, zwracając liczbę rzeczywiście wysłanych danych S. Samolej: Pliki, potoki, sygnały 50
51 Komunikacja międzyprocesowa przy użyciu FIFO producent (fifo3) #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <limits.h> #include <sys/types.h> #include <sys/stat.h> #define FIFO_NAME /tmp/my_fifo #define BUFFER_SIZE PIPE_BUF #define TEN_MEG (1024 * 1024 * 10) int main() { int pipe_fd; int res; int open_mode = O_WRONLY; int bytes_sent = 0; char buffer[buffer_size + 1]; if (access(fifo_name, F_OK) == -1) { res = mkfifo(fifo_name, 0777); if (res!= 0) { fprintf(stderr, Could not create fifo %s\n, FIFO_NAME); exit(exit_failure); printf( Process %d opening FIFO O_WRONLY\n, getpid()); pipe_fd = open(fifo_name, open_mode); printf( Process %d result %d\n, getpid(), pipe_fd); if (pipe_fd!= -1) { while(bytes_sent < TEN_MEG) { res = write(pipe_fd, buffer, BUFFER_SIZE); if (res == -1) { fprintf(stderr, Write error on pipe\n ); exit(exit_failure); bytes_sent += res; (void)close(pipe_fd); else { exit(exit_failure); printf( Process %d finished\n, getpid()); exit(exit_success); S. Samolej: Pliki, potoki, sygnały 51
52 Komunikacja międzyprocesowa przy użyciu FIFO konsument (fifo4) #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <fcntl.h> #include <limits.h> #include <sys/types.h> #include <sys/stat.h> #define FIFO_NAME /tmp/my_fifo #define BUFFER_SIZE PIPE_BUF int main() { int pipe_fd; int res; int open_mode = O_RDONLY; char buffer[buffer_size + 1]; int bytes_read = 0; memset(buffer, \0, sizeof(buffer)); printf( Process %d opening FIFO O_RDONLY\n, getpid()); pipe_fd = open(fifo_name, open_mode); printf( Process %d result %d\n, getpid(), pipe_fd); if (pipe_fd!= -1) { do { res = read(pipe_fd, buffer, BUFFER_SIZE); bytes_read += res; while (res > 0); (void)close(pipe_fd); else { exit(exit_failure); printf( Process %d finished, %d bytes read\n, getpid(), bytes_read); exit(exit_success); S. Samolej: Pliki, potoki, sygnały 52
53 Przykładowy rezultat pracy podanych 2 programów $./fifo3 & [1] 375 Process 375 opening FIFO O_WRONLY $ time./fifo4 Process 377 opening FIFO O_RDONLY Process 375 result 3 Process 377 result 3 Process 375 finished Process 377 finished, bytes read real user sys 0m0.053s 0m0.020s 0m0.040s Oba programy korzystają z FIFO w trybie blokującym Najpierw uruchamiany jest producent, który blokuje się, czekając na otwarcie FIFO przez program odczytujący Kiedy uruchomiony zostanie konsument, program zapisujący odblokowuje się i zaczyna wprowadzać dane do potoku W tym samym czasie program odczytujący rozpoczyna czytanie danych z potoku [1]+ Done fifo3 S. Samolej: Pliki, potoki, sygnały 53
Procesy. S. Samolej: Procesy
Procesy dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/ oraz Na materiałach
Pliki, potoki, sygnały
Pliki, potoki, sygnały dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/
Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011
Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie
1. Procesy i współbieżność
1. Procesy i współbieżność Opracował: Sławomir Samolej Politechnika Rzeszowska, Katedra Informatyki i Automatyki, Rzeszów, 2013. 1.1. Wprowadzenie Proces to przestrzeń adresowa i pojedynczy wątek sterujący,
Obsługa plików Procesy
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
Kolejki FIFO (łącza nazwane)
Kolejki FIFO (łącza nazwane) Systemy Operacyjne 2 laboratorium Mateusz Hołenko 6 listopada 2011 Plan zajęć 1 Łącza w systemie Linux kolejki FIFO vs. potoki specyfika łączy nazwanych schemat komunikacji
1.1 Definicja procesu
1 Procesy pojęcia podstawowe 1 1.1 Definicja procesu Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011
Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt
Łącza nienazwane(potoki)
8. Łącza nienazwane(potoki) Łącze (potok, ang. pipe) jest to urządzenie komunikacyjne pozwalające na przesyłanie informacji w jedną stronę. Jeden proces wysyła dane do łącza za pomocą funkcji write, zaś
4.2 Sposób korzystania z l acza
4.2 Sposób korzystania z l acza 31 Opis programu: Program procesu potomnego (linie 16 19) jest taki sam, jak w przyk ladzie na listingu 3. W procesie macierzystym nastepuje z kolei przekierowanie standardowego
Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.
Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,
Funkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Funkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:
Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie trzecie (jedne zajęcia) Temat: Potoki i łącza nazwane w Linuksie. Opracowanie: dr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) wiczenie trzecie Temat: Potoki i ł cza nazwane w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja z wykorzystaniem
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
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
Plik to uporządkowany ciąg danych Dostęp do danych w pliku jest sekwencyjny, tj. istnieje pojęcie elementu aktualnego (tzw. wskaźnika pliku). Możliwy dostęp do danych w pliku jest tylko tam, gdzie wskazuje
Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak
Laboratorium z systemów operacyjnych System plików - funkcje systemowe Anna Wojak 1 Zagadnienia do samodzielnego przygotowania: podstawowe polecenia linux, podstawy programowania w jezyku C, deskryptor
Model procesu w systemie Linux. Tomasz Borzyszkowski
Model procesu w systemie Linux Tomasz Borzyszkowski Definicja procesu klasyka Definicja [M.Bach WNT95] Proces jest wykonaniem programu i składa się ze zbiorowości bajtów, które CPU interpretuje jako instrukcje
SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)
Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany
4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane
Jędrzej Ułasiewicz Łącza nienazwane, nazwane, funkcja select 1 4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane Łącza nienazwane (ang. Unnamed Pipes) i nazwane (ang. Named Pipes) - jedna
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Pobieranie argumentów wiersza polecenia
Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:
Procesy, pliki, potoki, sygnały - uzupełnienie
Procesy, pliki, potoki, sygnały - uzupełnienie dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/
Komunikacja za pomocą potoków. Tomasz Borzyszkowski
Komunikacja za pomocą potoków Tomasz Borzyszkowski Wstęp Sygnały, omówione wcześniej, są użyteczne w sytuacjach błędnych lub innych wyjątkowych stanach programu, jednak nie nadają się do przekazywania
Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot
Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot 15 października 2016 Wstęp W tej instrukcji zawarte są informacje na temat jednych z podstawowych
Temat zajęć: Obsługa procesów w systemie.
Temat zajęć: Obsługa procesów w systemie. Czas realizacji zajęć: 90 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Procesy macierzyste i potomne, tworzenie procesów potomnych, uruchamianie
INFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
J. Ułasiewicz Łącza nienazwane, nazwane, select 1
J. Ułasiewicz Łącza nienazwane, nazwane, select 1 4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane Łącza nienazwane (ang. Unnamed Pipes) i nazwane (ang. Unnamed Pipes) - jedna z historycznie
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
Plik to uporządkowany ciąg danych Dostęp do danych w pliku jest sekwencyjny, tj. istnieje pojęcie elementu aktualnego (tzw. wskaźnika pliku). Możliwy dostęp do danych w pliku jest tylko tam, gdzie wskazuje
Temat zajęć: Obsługa łączy komunikacyjnych
Temat zajęć: Obsługa łączy komunikacyjnych Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: I. Łącza komunikacyjne Potoki nienazwane, potoki nazwane, przykłady
Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim
Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu
Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411b Plan wykładu Operacje wejścia-wyjścia Dostęp do plików Struktury
<stdio.h> <iostram> input. FILE *stdin. std::cin output. std::cout error. FILE *stdout. FILE *stderr
z przedmiotu, prowadzonych na Wydziale BMiI, Akademii Techniczno-Humanistycznej w Bielsku-Białej. Rodzina systemów POSIX zaopatrzona została w mechanizm tworzenie międzyprocesowych łączy komunikacyjnych
Argumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną
Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
sposób wykonywania operacji zapisu i odczytu dane odczytywane z l acza usuwane (nie można ich odczytać ponownie),
27 4 L acza L acza w systemie UNIX sa plikami specjalnymi, s luż acymi do komunikacji pomiedzy procesami. L acza maja kilka cech typowych dla plików zwyk lych, czyli posiadaja swój i-weze l, posiadaja
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
procesy odrębne dzielone
procesy odrębne Unikatowy PID (2-32000) Zmienne Zbiory deskryptorów plików Przestrzeń stosu (lokalne zmienne, wywołania funkcji) Środowisko Licznik rozkazów dzielone Kod programu brak możliwości zapisu
Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:
Rozdział 1 Obsługa plików W językach C pliki powiązane są ze strumieniami i pracuje się na nich podobnie jak na innych strumieniach. W języku C do operacji na plikach służą funkcje z biblioteki stdio.h,
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia
Materiały Operacje na plikach Informatyka Operacje wejścia-wyjścia w C/C++: Podejście proceduralne Podejście obiektowe Standardowe strumienie wejścia i wyjścia stdin - strumień wejściowy (klawiatura) cin
2. Zarządzanie procesami
J. Ułasiewicz Komputery i systemy równoległe 1 2. Zarządzanie procesami 2.1 Funkcje zarządzania procesami Administrowanie procesami obejmuje następujące czynności: Tworzenie procesu. Testowanie atrybutów
Strumienie i pliki. Programowanie Proceduralne 1
Strumienie i pliki. Programowanie Proceduralne 1 Ogólnie o plikach Plik - ciąg bajtów o skończonej długości Nawa pliku nie stanowi jego części Położenie pliku określone przez ścieżkę dostępu Pliki są opatrzone
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Pliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias
7 październik 2008 Uruchomienie, monitorowanie procesu, potoki, aliasy S laj d 1 Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias 7 październik 2008 Uruchomienie, monitorowanie
Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot
Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot października 2018 Wstęp W tej instrukcji zawarte są informacje na temat tworzenia i obsługiwania
Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)
Podstawy programowania ( język C ) Wskaźniki do funkcji Wykład 11. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Wskaźniki do funkcji (1) W języku C funkcje nie są zmiennymi, ale
Laboratorium systemów operacyjnych ćwiczenie nr 3. [ilość modułów: 1] Temat zajęć: Procesy w systemie operacyjnym
Temat zajęć: Procesy w systemie operacyjnym Czas realizacji zajęć: 45 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Pojęcie procesu, procesy w systemie, usuwanie procesów, priorytety
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Programowanie w językach wysokiego poziomu
Programowanie w językach wysokiego poziomu zajęcia nr 2 Elektronika i Telekomunikacja, semestr III rok akademicki 2014/2015 Plan dzisiejszych zajęć Pliki tekstowe 1. Operacje na plikach - wprowadzenie
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Temat zajęć: Obsługa systemu plików.
Temat zajęć: Obsługa systemu plików. Czas realizacji zajęć: 90 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: I. Operacje na plikach zwykłych. Tworzenie i otwieranie plików, deskryptory
Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces
Procesy pojęcia podstawowe 1 1.1 Jak kod źródłowy przekształca się w proces W języku wysokiego poziomu tworzy się tak zwany kod źródłowy który po zapisaniu będzie plikiem z programem źródłowym. Plik źródłowy
UŻYCIE I ZARZĄDZANIE WĄTKAMI
Proces jako pewna instancja programu, w trakcie wykonania, ze swej natury w każdym systemie operacyjnym wyróżniają: prawa własności zasobu a jednym z fundamentalnych zadań systemu jest ochrona przed jednoczesnym
UŻYCIE I ZARZĄDZANIE WĄTKAMI
Proces jako pewna instancja programu, w trakcie wykonania, ze swej natury w każdym systemie operacyjnym wyróżniają: prawa własności zasobu a jednym z fundamentalnych zadań systemu jest ochrona przed jednoczesnym
Programowanie Współbieżne. W Linuxie/Unixie
Programowanie Współbieżne W Linuxie/Unixie Identyfikatory pid numer identyfikacyjny procesu zwykle od 0 do 32K przydzielany przez system każdemu nowemu procesowi uzyskać możemy go przez int getpid() 0
Sygnały. 7. Sygnały (2005/2006)
Sygnały Sygnał jest to informacja dla procesu, że wystąpiło jakieś zdarzenie. Sygnały mogą być wysyłane: z procesu do innego procesu (grupy procesów) z procesu do siebie samego z jądra do procesu Sygnały
۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]
1 Plik jest wydzielonym fragmentem pamięci (najczęściej dyskowej) posiadającym nazwę. Z punktu widzenia C plik jest ciągiem bajtów, z których każdy może zostać oddzielnie odczytany. Zgodnie ze standardem
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę
J. Ułasiewicz Łącza nienazwane, nazwane, select 1
J. Ułasiewicz Łącza nienazwane, nazwane, select 1 4. Komunikacja pomiędzy procesami przez łącza nienazwane i nazwane Łącza nienazwane (ang. Unnamed Pipes) i nazwane (ang. Unnamed Pipes) - jedna z historycznie
Temat zajęć: Tworzenie i obsługa wątków.
Temat zajęć: Tworzenie i obsługa wątków. Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie wątków, przekazywanie parametrów do funkcji wątków i pobieranie
dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )
dynamiczny przydział pamięci malloc() free() realloc() calloc() memset() memcpy( ) mempcpy( ) memmove() (wskaźniki!! ) 1 dynamiczny przydział pamięci void * memccpy (void * to, void * from, int c, int
Programowanie w językach
Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie
Ghost in the machine
Operacje na pami eci i odrobina I/O Zak lad Chemii Teoretycznej UJ 8 stycznia 2007 Funkcje operujace Wstep do operacji I/O na plikach 1 Operacje na pami eci 2 Funkcje operujace 3 Wst Funkcje operujace
Pliki. Operacje na plikach w Pascalu
Pliki. Operacje na plikach w Pascalu ścieżka zapisu, pliki elementowe, tekstowe, operacja plikowa, etapy, assign, zmienna plikowa, skojarzenie, tryby otwarcia, reset, rewrite, append, read, write, buforowanie
Krótki kurs programowania współbieżnego
Krótki kurs programowania współbieżnego Procesy i sygnały w językach C oraz Python Semafory i pamięć dzielona (język C) Uproszczony semafor z Pythona Inne metody komunikowania urs systemu UNIX 1 Ale najpierw
Operacje powiązane z systemem:
PLIKI Operacje powiązane z systemem: funkcje biblioteczne stand. biblioteki C, libc; wykonywane jak wywołania innych funkcji; mogą wywoływać inne funkcje lub wywołania systemowe) wywołania systemowe zaimplementowane
Moduł 4: Strumienie, potoki, sterowanie procesami
Moduł 4: Strumienie, potoki, sterowanie procesami Strumienie i potoki Standardowe strumienie są podstawowymi kanałami komunikacji pomiędzy komputerem a otoczeniem. Do podstawowych strumieni należą Standard
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Systemy Operacyjne I: Procesy
Politechnika Poznańska 4 kwietnia 2013 Materiały Prezentacja oraz inne materiały zostały przygotowane na podstawie: Użytkowanie systemu operacyjnego UNIX - dr D.Wawrzyniak Systemy operacyjne - skrypt -
1. Kolejki komunikatów POSIX
Jędrzej Ułasiewicz IIAiR Politechnika Wrocławska 1 1. Kolejki komunikatów POSIX 1.1 Podstawowe własności Kolejki FIFO maja następujące wady: Komunikaty pozbawione struktury Nie można testować stanu kolejki
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego 1 /24 Pisanie pojedynczych znaków z klawiatury do pliku #include void main(void) { FILE *fptr; // wkaznik do pliku, tzw. uchwyt
Programowanie Proceduralne
Programowanie Proceduralne Pliki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12 Operacje plikowe Plik - dokument lub inny zbiór danych zapisany na dysku, oznaczony unikatowa
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Programowanie Proceduralne
Programowanie Proceduralne Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Co dziś będzie: Definiowanie struktury Deklarowanie zmiennych bȩda cych strukturami
Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2009/2010
Tryb studiów Studia stacjonarne Kierunek studiów Informatyka Poziom studiów Pierwszego stopnia Rok studiów/semestr 2(rok)/(sem) Specjalność Bez specjalności Kod katedry/zakładu w systemie USOS 10000000
ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
aodczytywać zniegoza pomoc afunkcjiread, (niebuforowane funkcje wejścia/wyjścia). e sukcesem, to zwróci liczb, erzeczywiściezapisanychbajtów.
c Wies law P laczek 15 4 Potoki 4.1 Wprowadzenie Potok (ang. pipe) możnauznaćzaplikspecjalnegotypuktórys lużydoprzechowywania ograniczonej ilości danych i do którego dost ep może si eodbywaćjedyniewtrybie
Wprowadzenie do programowania współbieżnego i rozproszonego
Wprowadzenie do programowania współbieżnego i rozproszonego dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych
Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.
Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym
2. Zarządzanie procesami
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 2. Zarządzanie procesami 2.1 Funkcje zarządzania procesami Administrowanie procesami obejmuje następujące czynności: Testowanie atrybutów procesu.
MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników
MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników Funkcja getchar() Jest to bardzo prosta funkcja, wczytująca 1 znak z
Krótkie wprowadzenie do korzystania z OpenSSL
Krótkie wprowadzenie do korzystania z OpenSSL Literatura: http://www.openssl.org E. Rescola, "An introduction to OpenSSL Programming (PartI)" (http://www.linuxjournal.com/article/4822) "An introduction
Kolejki komunikatów POSIX
Jędrzej Ułasiewicz IIAiR Politechnika Wrocławska 1 Kolejki komunikatów POSIX 1 Wstęp Kolejka komunikatów Q posiada następujące własności: - Posiada określoną pojemność N komunikatów (długość bufora komunikatów).
1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:
6 Pamięć współdzielona 6.1 Dostęp do pamięci współdzielonej 1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu: #include #include #include #include
3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);
3.1. Określanie adresu połączonego hosta 3. #include int getpeername(int socket, struct sockaddr *addr, int *addrlen); Funkcja getpeername dostarcza adresu drugiej strony połączenia. Parametry:
Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1
Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego
Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe. 1. Wektory i macierze: a. Przykład