Programowanie Współbieżne. W Linuxie/Unixie
|
|
- Władysława Nowak
- 7 lat temu
- Przeglądów:
Transkrypt
1 Programowanie Współbieżne W Linuxie/Unixie
2 Komunikacja p r o c e s u ż y t k o w n i k a 1 p r o c e s u ż y t k o w n i k a 2 J ą d r o s y s t e m u
3 Komunikacja p r o c e s u ż y t k o w n i k a 1 p r o c e s u ż y t k o w n i k a 2 J ą d r o s y s t e m u J ą d r o s y s t e m u
4 Komunikacja n a z w a p l i k u t r e ś ć p l i k u l u b k o m u n i k a t o b ł ę d z i e s t d i n n a z w a p l i k u s t d o u t k l i e n t t r e ś ć p l i k u l u b s e r w e r p l i k k o m u n i k a t o b ł ę d z i e klient pobiera nazwę pliku ze standardowego wejścia przesyła ją do serwera serwer otwiera plik przesyła go klienta (lub info o błędzie) klient wyświetla zawartość na stdout
5 Łącza PIPE Łącza nie nazwane (PIPE) umożliwiają przepływ danych w jednym kierunku tworzymy za pomocą funkcji int pipe(int *filedes); filedes jest tablica dwuelementową filedes[0] jest deskryptorem pliku otwartym do czytania filedes[1] jest deskryptorem pliku otwartym do pisana
6 Łącza PIPE łącza komunikacyjne zwykle używamy do komunikowania się dwóch procesów, ale poniższy przykład będzie na jednym main() { int pipefd[2],n; char buff[100]; if (pipe(pipefd) <0) perror("blad pipe\n"); printf("read fd = %d, write fd = %d\n",pipefd[0],pipefd[1]); if (write(pipefd[1],"hello world\n",12)!=12) perror("blad zapisu\n"); if ((n = read(pipefd[0],buff,sizeof(buff))) <=0) perror("blad odczytu\n"); write(1, buff, n); /* deskryptor pliku=1 wyjscie standardowe */ exit(0); }
7 Łącza PIPE może być tak że hello world będzie przed napisem read fd =... itd. Ponieważ printf korzysta z bufora i jest on opróżniany pod koniec programu. Stworzyliśmy mniej więcej takie łącze: p r o c e s u ż y t k o w n i k a p i s a n i e c z y t a n i e j ą d r o s y s t e m u ł ą c z e k. p r z e p ł y w d a n y c h
8 Łącza PIPE By stworzyć łącze pomiędzy dwoma procesami musimy podążać następującym algorytmem proces macierzysty tworzy łącze następnie się forkuje, tu następuję skopiowanie deskryptorów proces macierzysty zamyka jeden deskryptor do pisania lub do czytania proces potomny zamyka jeden deskryptor do czytania lub do pisania fork() Pisanie P1 Czytanie Pisanie P2 Czytanie Jądro systemu Łącze
9 Łącza PIPE łącza te są jednokierunkowe, jeżeli chcemy komunikację w dwóch kierunkach to trzeba wykonać następujące kroki utwórz dwa łącza (łącze1, łącze2) wywołaj fork przodek zamyka łącze 1 do czytania; przodek zamyka łącze 2 do pisania; potomek zamyka łącze 1 do pisania; potomek zamyka łącze 2 do czytania; Pisanie1 P1 Czytanie2 Pisanie2 P2 Czytanie1 Jądro systemu Łącze2 Łącze1
10 Łącza PIPE standardowa bibliteka we/wy zawiera funkcje tworząca łącze komunikacyjne oraz inicjującą wykonywanie drugiego procesu: #include <stdio.h> FILE *popen(char *command, char *type); command oznacza wiersz polecenia typ r lub w zwraca wejście lub wyjście lub w razie nie powodzenia NULL funkcja do zamknięcia strumienia otworzonego przez popen to: #include <stdio.h> int pclose(file *stream);
11 sprintf(command, "cat %s",line); if ((fp = popen(command, "r")) == NULL) perror("blad popen\n"); /* pobieraj dane z pliku i wysylaj je do wyjscia standardowego */ while ((fgets(line, MAXLINE,fp))!= NULL) { n = strlen(line); if (write(1, line, n)!= n) /* fd 1 = stdout */ perror("client: blad zapisu danych\n"); } if (ferror(fp)) /* sprawdza znacznik bledu dla strumienia wskazywanego przez stream, zwracaj niezerowa warto jesli jest on ustawiony */ perror("blad fget\n"); pclose(fp); exit(0); } Łącza PIPE #include <stdio.h> #define MAXLINE 1024 main () { char line[maxline],command[maxline+10]; int n; FILE *fp; /* pobierz nazwe pliku z wejscia standardowego */ if (fgets(line, MAXLINE, stdin) == NULL) perror("client: blad odczytu nazwy opliku\n");
12 Łącza PIPE Największą wadą łącz PIPE jest to że możemy je tworzyć jedynie pomiędzy procesami spokrewnionymi.
13 Łącza (kolejki) FIFO Inaczej łącza nazwane. Są podobne do łącz komunikacyjnych umożliwiają przepływ jednokierunkowy pierwszy bajt przeczytany z kolejki fifo będzie pierwszym który był tam wpisany. kolejka FIFO w odróżnieniu od łącza nienazwanego ma nazwę dzięki temu do tego samego łącza mogą mieć dostęp procesy niespokrewnione
14 Łącza (kolejki) FIFO Do tworzenia kolejki FIFO służy funkcja int mknod(char *pathname, int mode, int dev); pathname normalna nazwa ścieżki mode słowo trybu dostępu które będzie zsumowane logicznie ze znacznikiem S_IFIFO z pliku <sys/stat.h> dev urządzenie, przy kolejkach FIFO można pominąć można też za pomocą polecenia /etc/mknod name p gdy już powstanie trzeba ją otworzyć do czytania lub pisania np. przez open czy fopen, freopen. Można ustawić odpowiedni znacznik O_NDELAY Wynik ustawienia znacznika O_NDELAY mamy w tabelce:
15 Sytuacja Łącza (kolejki) FIFO Nie ustawiono znacznika O_NDELAY ustawiono znacznik O_NDELAY Otwórz kolejkę FIFO tylko do czytania, a żaden proces nie otworzył tej kolejki do pisania otwórz kolejkę FIFO tylko do pisania żaden proces nie otworzył tej kolejki do czytania Czekaj, aż proces otworzy kolejkę FIFO do pisania czekaj, aż proces otworzy kolejkę FIFO do czytania powróć natychmiast bez sygnalizowania błędu powróć natychmiast, sygnalizuj błąd, w errno umieść stałą ENXIO czytaj z łącza komunikacyjnego (lub kolejki FIFO), brak danych pisz, łącze komunikacyjne (lub kolejka FIFO) zapełnione czekaj, aż pojawią się dane w łączu (kolejce) lub nie będzie ono (ona) otarte do pisania dla żadnego procesu; jako wartość funkcji przekaż zero, jeżeli żaden proces nie otworzył łącza (kolejki) do pisania, inaczej przekaż liczbę danych czekaj, aż będzie miejsce, następnie pisz dane powróć natychmiast, przekaż zero jako wartość funkcji powróć natychmiast, przekaż zero jako wartość funkcji
16 Reguły: Łącza (kolejki) FIFO jeżeli proces zażąda przeczytania mniejszej ilość danych niż jest w łączu to przeczyta tyle ile chciał a resztę przy okazji jeżeli proces zażąda więcej danych niż jest to dostanie tyle ile jest w łączu. jeżeli w łączu nie ma danych, a żaden proces nie otworzył go do pisania to wartość read będzie zero, oznaczające koniec pliku. jeżeli proces zapisze mniejszą porcję danych niż wynosi pojemność łącza lub kolejki FIFO ( zwykle 4096B) to niepodzielność danych będzie zagwarantowana jeżeli więcej to nie jest to zagwarantowane bo drugi proces piszący do tego samego łącza może przepleść dane jeżeli proces wywołuje write do łącza którego nie otworzył żaden inny proces do czytania to dostanie on SIGPIPE write zwróci 0 errno będzie miało wartość EPIPE jeżeli proces nie obsłuży sygnału SIGPIPE to zostanie zakończony
17 Łącza (kolejki) FIFO Wyobraźmy sobie demona czekającego na dane od klientów na jakimś łączu otwartym do czytania, gdy klient skończy pisanie i zakończy się przez np. exit to łącze trzeba było by drugi raz otwierać i czekać. demon powinien otworzyć to samo łącze zarówno do czytania jak i do pisania do pisania nigdy nie użyje ale dzięki temu nie dostanie EOF z powodu braku klienta który by pisał.
18 #include <sys/types.h> #include <sys/stat.h> #include <sys/errno.h> extern int errno; #define FIFO1 "tmp/fifo.1" #define FIFO2 "tmp/fifo.2" #define PERMS 0666 Łącza (kolejki) FIFO main() { int readfd, writefd; /* otworz kolejki FIFO przyjmujemy ze serwer juz je stworzyl */ if ((writefd = open(fifo1, 1)) < 0) perror("klient: nie moze otworzyc fifo1 do pisania"); if ((readfd = open(fifo2, 0)) < 0) perror("klient: nie moze otworzyc fifo2 do czytania"); client(readfd,writefd); close(readfd); close(writefd); /* usun kolejki FIFO */ if (unlink(fifo1) < 0) perror("rodzic nie moze usunac FIFO1 %s",fifo1); if (unlink(fifo2) < 0) perror("rodzic nie moze usunac FIFO2 %s",fifo2); exit(0); }
19 Łącza (kolejki) FIFO #include <sys/types.h> #include <sys/stat.h> #include <sys/errno.h> extern int errno; #define FIFO1 "tmp/fifo.1" #define FIFO2 "tmp/fifo.2" #define PERMS 0666 main() { int readfd, writefd; /* utworz kolejki FIFO i nastepnie je otworz - jedna do czytania */ /* druga do pisania */ if ((mknod(fifo1, S_IFIFO PERMS, 0) < 0) && (errno!=eexist)) perror("nie moge utworzyc fifo 1: %s\n", FIFO1); if ((mknod(fifo2, S_IFIFO PERMS, 0) < 0) && (errno!=eexist)) { unlink(fifo1); perror("nie moge utworzyc fifo 2: %s\n", FIFO2); } if ((readfd = open(fifo1,0)) < 0) perror("serwer: nie moze otworzyc fifo1 do czytania"); if ((writefd = open(fifo2,1)) < 0) perror("serwer: nie moze otworzyc fifo2 do pisania"); server(readfd,writefd); close(readfd); close(writefd); exit(0); }
20 Strumienie danych a komunikaty W dotychczasowych przykładach używaliśmy pojęcia strumienia danych nie ma w nim żadnych wydzielonych rekordów czy struktur system w żaden sposób nie interpretuje jakie dane otrzymuje jeżeli chcemy interpretować to procesy czytający i piszący muszą ustalić wspólny sposób przekazywania danych najprostszą strukturą są wiersze zakończone \n można też wymyślić bardziej złożone struktury Struktura z typem i długością komunikatu. Dla dalszych przykładów strukturę tą umieścimy w pliku mesg.h:
21 Strumienie danych a komunikaty #define MAXMESGDATA ( ) #define MESGHDRSIZE (sizeof(mesg) MAXMESGDATA) typedef struct { int mesg_len; long mesg_type; char mesg_data[maxmesgdata]; } Mesg;
22 Strumienie danych a komunikaty #include mesg.h /* nasza struktura */ /* wyślij komunikat używając deskryptora pliku, pola struktury musi wypełnić wcześniej proces wywołujący */ void mesg_send(int fd, Mesg *mesgptr) { int n; /* przygotuj nagłówek */ n = MESGHDRSIZE + mesgptr->mesg_len; if (write(fd, (char*) mesgptr, n )!=n) perror( blad zapisu komunikatu\n ); }
23 Strumienie danych a komunikaty /* pobierz komunikat, korzystając z deskryptora plików wypełnij pola struktury Mesg i zwróć wartość pola mesg_len */ int mesg_recv(int fd, Mesg *mesgptr) { int n; /* pobieramy nagłówek i sprawdzamy ile jeszcze do pobrania */ /* jeżeli EOF to zwracamy 0 */ if ((n = read(fd, (char*)mesgptr, MESGHDRSIZE)) == 0) return(0); /*koniec pliku */ else if (n!= MESGHDRSIZE) perror( blad odczytu nagłówka komunikatu \n ); if ((n = mesgptr->mesg_len) > 0) if (read(fd, mesgptr->mesg_data, n)!= n) perror( blad odczytu danych komunikatu\n ); return(n); }
24 Strumienie danych a komunikaty Mesg mesg; void client(int ipcreadfd, int ipcwritefd) { int n; if (fgets(mesg.mesg_data, MAXMESGDATA, stdin) == NULL) perror("blad odczytu nazwy pliku\n"); n = strlen(mesg.mesg_data); if (mesg.mesg_data[n-1] == '\n') n--; /*pomin znak nowego wiersza pobierany przez fgets() */ mesg.mesg_len = n; mesg.mesg_type = 1L; mesg_send(ipcwritefd, &mesg); while (( n = mesg_recv(ipcreadfd, &mesg)) > 0) if (write(1, mesg.mesg_data, n)!= n) perror("blad zapisu nanych\n"); if (n<0) perror("blad odczytu danych\n"); }
25 Strumienie danych a komunikaty extern int errno; void server(int ipcreadfd, int ipcwritefd) { int n, filefd; char errmesg[256]; mesg.mesg_type = 1L; if ((n = mesg_recv(ipcreadfd,&mesgt)) <= 0) perror("server: blad odczytu nazwy pliku\n"); mesg.mesg_data[n] = '\0'; if ((filefd = open(mesg.mesg_data, 0)) < 0) { /* blad, przygotuj komunikat o bledzie */ sprintf(errmesg,":nie moge otworzyc %s\n", strerror(errno)); strcat(mesg.mesg_data,errmesg); mesg.mesg_len = strlen(mesg.mesg_data); mesg_send(ipcwritefd,&mesg); } else //...cdn
26 Strumienie danych a komunikaty //...cd { while (( n = read(filefd, mesg.mesg_data, MAXMESGDATA)) > 0) { mesg.mesg_len = n; mesg_send(ipcwritefd, &mesg); } close(filefd); if (n < 0) perror("server: blad odczytu"); } /* wyslij pusty komunikat ktory oznacza zakonczenie przetwarzania */ mesg.mesg_len = 0; mesg_send(ipcwritefd,&mesg); }
27 Przestrzenie nazw łącza nie mają nazw ale kolejki można identyfikować za pomocą unixowych nazw ścieżek. zbiór możliwych nazw dla danego rodzaju komunikacji międzyprocesowej nazywamy przestrzenią nazw. wszystkie rodzaje komunikacji międzyprocesowej (z wyjątkiem łączy) odbywają się za pośrednictwem nazw. Zestawienie konwencji nazewniczych przyjętych dla różnych rodzajów komunikacji międzyprocesowej:
28 Przestrzenie nazw Rodzaj komunikacji międzyprocesowej Przestrzeń nazw Identyfikacja łącze komunikacyjne (nie ma nazwy) deskryptor pliku kolejka FIFO nazwa ścieżki deskryptor pliku kolejka komunikatów klucz key_t identyfikator pamięć wspólna klucz key_t identyfikator semafor klucz key_t identyfikator gniazdo dziedzina Unixa nazwa ścieżki deskryptor pliku gniazdo inna dziedzina (w zależności od dziedziny) deskryptor pliku
29 Klucze key_t są to identyfikatory zazwyczaj 32b określające jednoznacznie kolejki komunikatów, pamięć wspólną lub semafory. Można wymyślać samemu np 1234L Ale w poważniejszych zastosowaniach lepiej użyć: #include <sys/types.h> #include <sys/ipc.h> key_t ftok(char *pathname, char proj); na podstawie nazwy ścieżki i numeru projektu (proj jest liczbą 8b), tworzy nam prawie unikalny klucz. (jest to liczba 32 bitowa a jest tworzona na podstawie i-węzła (32b) nr projektu (8b) i tzw. małego numeru urządzenia systemu pliku (8b))
30 Klucze key_t #include <sys/types.h> #include <sys/ipc.h> main() { key_t klucz; klucz = ftok("/tmp/alamakota",4); //plik musi byc bo jak nie to ftok zwroci -1 printf(" ftok %d\n",klucz); }
Łą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
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
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
Łą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ś
Programowanie Współbieżne. Komunikacja między procesowa IPC
Programowanie Współbieżne Komunikacja między procesowa IPC IPC W systemie V są 3 rodzaje komunikacji między procesowej. kolejki komunikatów semafory pamięć wspólna IPC plik nagłówkowy funkcja systemowa
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
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
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
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ę,
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
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
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
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
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
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
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:
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
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
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
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
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Reprezentacja i przetwarzanie plików Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
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
Ć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
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
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
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
SYSTEMY CZASU RZECZYWISTEGO - VxWorks
WZAJEMNE WYKLUCZANIE Wiele metod. Np. wyłączanie przerwań: funkcja() //... Int blokada = intlock(); // Obszar krytyczny, któremu nie możemy przerwać intunlock(blokada); wyłączanie wywłaszczania: funkcja()
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
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,
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
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
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
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:
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część trzynasta Tablice struktur, pliki struktur Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści
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
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
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych IPC Systemu V laboratorium: 08 Kraków, 2014 08. Programowanie Usług Sieciowych
Instytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych
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,
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
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
۰ 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
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
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
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ę
Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.
Pliki w C++ Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF. Z każdym strumieniem związany jest wskaźnik bieżącej
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 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
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
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
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ą
KOLEJKI KOMUNIKATÓW IPC
z przedmiotu, prowadzonych na Wydziale BMiI, Akademii Techniczno-Humanistycznej w Bielsku-Białej. Współbieżność procesów (czy wątków) wiąże się często z potrzebą okresowej (asynchronicznej) wymiany komunikatów.
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
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,
Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.
Języki programowania Karolina Mikulska-Rumińska E-mail: karolamik@fizyka.umk.pl Pokój 573, tel. 3346 Konsultacje wtorek 9-10. Pliki Dwa rodzaje plików: Tekstowe, Binarne Aby otworzyć plik należy najpierw
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,
Programowanie Procedurale. Pliki w języku C++
Programowanie Procedurale. Pliki w języku C++ Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale. Pliki w języku C++
4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 6. Tablice znakowe o dwóch indeksach, przekazywanie tablic do funkcji cd., dynamiczna alokacja pamięci, funkcje przetwarzające ciągi
SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej
SEGMENT TCP CZ. I Numer portu źródłowego (ang. Source port), przeznaczenia (ang. Destination port) identyfikują aplikacje wysyłającą odbierającą dane, te dwie wielkości wraz adresami IP źródła i przeznaczenia
Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.
Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka 2018-03-27 09:06:38 +0200 Część I Formatowane (tekstowe) wejście/wyjście Otwarcie pliku
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
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
Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część ósma Tablice struktur, pliki struktur Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w
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
Operacje wejścia/wyjścia odsłona pierwsza
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Operacje wejścia/wyjścia (odsłona druga) - pliki
Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały
Temat zajęć: Mechanizmy IPC: kolejki komunikatów.
Temat zajęć: Mechanizmy IPC: kolejki komunikatów. Czas realizacji zajęć: 90 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie kolejek komunikatów, wysyłanie i odbieranie komunikatów,
Struktury czyli rekordy w C/C++
Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,
1 Pierwsze kroki w C++ cz.3 2 Obsługa plików
1 Pierwsze kroki w C++ cz.3 2 Obsługa plików Do pracy z plikami zewnętrznymi niezbędna będzie biblioteka fstream. Udostępnia ona programiście narzędzia do zapisu i odczytu plików. 2.1 Typ zmiennej fstream.
Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku
Tablice w argumentach funkcji Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku Przykład: char str[] = abcdef ;... fun(str); // argument faktyczny to id
Mechanizmy z grupy IPC
Mechanizmy z grupy IPC Podobnie jak łącza, IPC (Inter Process Communication) jest grupą mechanizmów komunikacji i synchronizacji procesów działających w ramach tego samego systemu operacyjnego. W skład
Linux Kernel III. Character devices
Linux Kernel III Character devices Urządzenia systemu Linux (I) Character device Block device Network device Do urządzenia piszemy jak do pliku, Dozwolone działania: open, close, read, write, Np. /dev/tty1.
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:
Systemy Operacyjne - Operacje na plikach
Systemy Operacyjne - Operacje na plikach Andrzej Stroiński Institute of Computer Science Poznań University of Technology 1 październik, 2012 Wprowadzenie do ANSI-C Pomoc systemowa man gcc man 2 write man
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Reprezentacja i przetwarzanie plików Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze
Pamięć współdzielona
Pamięć współdzielona Systemy Operacyjne 2 Piotr Zierhoffer 17 listopada 2011 Mechanizmy IPC IPC Inter Process Communication kolejki komunikatów, pamięć współdzielona semafory polecenia bash: ipcs, ipcrm
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
Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła
Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Język C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:
Wejście/Wyjście wer. 7 z drobnymi modyfikacjami Wojciech Myszka 2014-05-12 16:48:03 +0200 Strumienie 1. W czasach przed-uniksowych program wykonujący operacje wejścia/wyjścia musiał podłączyć wszystkie
Pliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Mechanizmy pracy równoległej. Jarosław Kuchta
Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy
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).
Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.
Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania. Dlatego trzeba je zapisywać do pliku, a potem umieć je z tego
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
Klient-Serwer Komunikacja przy pomocy gniazd
II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
<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
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
Co nie powinno być umieszczane w plikach nagłówkowych:
Zawartość plików nagłówkowych (*.h) : #include #define ESC 27 dyrektywy dołączenia definicje stałych #define MAX(x,y) ((x)>(y)?(x):(y)) definicje makr int menu(char* tab[], int ilosc); struct
2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
IPC: Kolejki komunikatów
IPC: Kolejki komunikatów Systemy Operacyjne 2 laboratorium Mateusz Hołenko 7 listopada 2011 Plan zajęć 1 Mechanizmy IPC kolejki komunikatów pamięć współdzielona semafory 2 Kolejki komunikatów kolejka komunikat
Podstawy Programowania. Obsługa błędów, przeszukiwanie i sortowanie tablic
Podstawy Programowania Wykład VIII Obsługa błędów, przeszukiwanie i sortowanie tablic Robert Muszyński ZPCiR IIAiR PWr Zagadnienia: źródła błędów, organizacja obsługi błędów, standardowe funkcje obsługi
WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5
WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne
Podstawy Kompilatorów
Podstawy Kompilatorów Laboratorium 10 Translacja sterowana składnią w generatorze YACC. Zadanie 1: Proszę napisać program, który dla danej liczby całkowitej j oraz niepustego ciągu liczb naturalnych c
Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);
Semafory przypomnienie semafory służą ochronie dostępu procesów do sekcji krytycznej; na semaforach dostępne są dwie operacje: podniesienie semafora signal, opuszczenie semafora wait opuszczony semafor
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