Prosty sterownik. Michał mina86 Nazarewicz. 6marca
|
|
- Jolanta Wróblewska
- 6 lat temu
- Przeglądów:
Transkrypt
1 6marca2010
2 O czym będzie prezentacja? Szkielet sterownika. Plik urządzenia. Operacje read(2) i write(2). Operacja lseek(2). Zarządzanie pamięcią. Wzajemne wykluczanie. Parametry modułu.
3 Dla kogo jest prezentacja? Dla chętnego napisać sterownik dla Linuksa......lubciekawegojaktowyglądaodśrodka. Wskazana znajomość języka C......lubinnegojęzykastrukturalnego......wraziewątpliwościzachęcamdozadawaniapytań.
4 Kim jestem? Czyli jak ja śmiem mówić o sterownikach. Student PW. Od 8 lat fan Slackware a. Od ponad roku pracownik grupy platformowej SPRC. Kilka patchy w jądrze. Zatem coś wiemosterownikach i postaram się zagadnienie przybliżyć.
5 Hello World. W zasadzie to sam szkielet. Przy załądowaniu i usunięciu wypisuje tekst. Pozatymnierobinic.:)
6 Hello World, deklaracje Początkowe deklaracje: hello.c(1 10) 1/ 2 Helloworld driver. 3 Copyright(c) 2010 Michal Nazarewicz(mina86@mina86.com) 4 / 6#include <linux/module.h> 8 MODULE DESCRIPTION( Simple hello world driver ); 9 MODULE AUTHOR( Michal Nazarewicz ); 10 MODULE LICENSE( GPL );
7 Hello World, wejście Funkcja inicjująca: hello.c(13 18) 13 static int init helloinit(void) 14 { 15 printk(kern INFO hello, world\n ); 16 return 0; 17 } 18 moduleinit(helloinit)
8 Hello World, wyjście Funkcja czyszcząca: hello.c(20 99) 20 static void exit hello exit(void) 21 { 22 printk(kern INFO Goodbye, cruel world, I m leaving you today\n ); 23 printk(kern INFO Goodbye, goodbye, goodbye\n ); 24 printk(kern INFO Goodbye, all you people\n ); 25 printk(kern INFO There s nothing you can say\n ); 26 printk(kern INFO To make me change my mind, goodbye\n ); 27 } 28 moduleexit(helloexit)
9 Hello World, budowanie Plik Makefile: obj-m += hello.o Komenda budująca: make-c/usr/src/linux"m=$pwd" modules
10 Hello World, testowanie Wczytywanie modułu: insmod hello.ko Usuwanie modułu: rmmod hello Sprawdzanie komunikatów: dmesg dmesg-c
11 Zero Proste urządzenie znakowe. Imituje standardowe urządzenie/dev/zero. Zapisywane dane są ignorowane. Przy odczycie same zera.
12 Zero, deklaracje Dołączone nowe nagłówki: zero.c(1 13) 1/ 2 Zerodriver 3 Copyright(c) 2010 Michal Nazarewicz(mina86@mina86.com) 4 / 6#include <linux/module.h> 7#include <linux/miscdevice.h> 8#include <linux/fs.h> 9#include <linux/uaccess.h> 11 MODULE DESCRIPTION( Example driver doing what/dev/zero does ); 12 MODULE AUTHOR( Michal Nazarewicz ); 13 MODULE LICENSE( GPL );
13 Zero,initiexit Funkcja inicjująca i czyszcząca: zero.c(53 99) 53 static int init zero init(void) 54 { 55 int ret = misc register(&zero dev); 56 printk(kern INFO zero: loading, misc register returned%d\n, ret); 57 return ret; 58 } 59 moduleinit(zeroinit) 61 static void exit zeroexit(void) 62 { 63 int ret = misc deregister(&zero dev); 64 printk(kern INFO zero: unloading, misc deregister returned%d\n, ret); 65 } 66 moduleexit(zeroexit)
14 Zero, struktury/deskryptory Opis urządzenia: zero.c(46 50) 46 static struct miscdevicezerodev= { 47.minor = MISC DYNAMIC MINOR, 48.name = myzero, 49.fops =&zerofops, 50 }; Spis operacji plikowych: zero.c(40 44) 40 static conststruct fileoperations zerofops = { 41.read =zeroread, 42.write =zerowrite, 43 };
15 Zero, operacja write(2) Operacja write(2) zwyczajnie ignoruje dane wejściowe: zero.c(31 37) 31 static ssizet zerowrite(struct file file,constchar user buf, 32 sizet len, lofft offp) 33 { 34 printk(kern INFO zero: write(%zu)\n, len); 36 return len; 37 }
16 Zero, operacja read(2) Operacja read(2) wypełnia bufor użytkownika zerami: zero.c(16 29) 16 static const char zeros[page SIZE]; 18 static ssizet zeroread(struct file file,char user buf, 19 sizet len, lofft offp) 20 { 21 ssizet ret =min(len,sizeof zeros); 22 printk(kern INFO zero: read(%zu(%zd))\n, len, ret); 24 if (likely(ret)) 25 if (unlikely( copytouser(buf, zeros, ret))) 26 ret =-EFAULT; 28 return ret; 29 }
17 Zero, testowanie Budowanie, wczytywanie i usuwanie jak w Hello World. Zapis: echo foo >/dev/myzero; dmesg tail-n1 Odczyt: head-c1024/dev/myzero hexdump-c;dmesg tail-n1 head-c8000/dev/myzero hexdump-c;dmesg tail-n2
18 Memory Urządzenie znakowe pozwalające na zapamiętywanie danych. Zapisywane dane są umieszczane w buforze. Dane z bufora można następnie odczytać. Dane są wspólne dla każdego otworzonego pliku. Dane nie są gubione, gdy wszystkie pliki są zamykane. Nagłówki, a także funkcja inicjująca i czyszcząca są identyczne jak w porzednim module.
19 Memory, definicje Modyfikowalny bufor zamiast zer: mem-basic.c(16 17) 16 static char memory[page SIZE]; Nowa operacja plikowa, llseek: mem-basic.c(72 76) 72 static conststruct fileoperations memfops={ 73. llseek = mem llseek, 74.read =memread, 75.write =memwrite, 76 };
20 Memory, operacja read(2) Operacja read(2) wczytuje dane z bufora: mem-basic.c(35 49) 35 static ssizet memread(structfile file,char user buf, 36 sizet len, lofft offp) 37 { 38 printk(kern INFO mem: read(%zu)\n, len); 40 if ( offp >=sizeofmemory!len) 41 return 0; 43 len=min(len,(sizet)(sizeof memory- offp)); 44 if (unlikely( copytouser(buf,memory+ offp,len))) 45 return-efault; 47 offp += len; 48 return len; 49 }
21 Memory, operacja write(2) Operacja write(2) zapisuje dane do bufora: mem-basic.c(52 69) 52 static ssizet memwrite(struct file file, constchar user buf, 53 sizet len, lofft offp) 54 { 55 printk(kern INFO mem: write(%zu)\n, len); 57 if (!len) 58 return 0; 60 if ( offp >= sizeof memory) 61 return -ENOSPC; 63 len=min(len,(sizet)(sizeof memory- offp)); 64 if (unlikely( copyfromuser(memory+ offp,buf,len))) 65 return -EFAULT; 67 offp += len; 68 return len; 69 }
22 Memory, operacja lseek(2) Wspomniana operacja llseek implementująca lseek(2): mem-basic.c(19 32) 19 static lofft memllseek(struct file file, lofft off, intwhence) 20 { 21 switch(whence) { 22 case SEEK CUR: 23 off += file->f pos; 24 break; 25 case SEEK END: 26 off += sizeof memory; 27 } 28 if (off <0) 29 return-einval; 30 file->fpos=off; 31 return off; 32 }
23 Memory, testowanie echo Lorem ipsum dolor sit amet >/dev/mymem head-n1/dev/mymem cat/dev/urandom >/dev/mymem hexdump-c/dev/mymem
24 Growable Bufor na początku pusty. Bufor rośnie, gdy wpisuje się dane. Określony limit rozmiaru(1 MiB).
25 Growable, deklaracje Dodany nowy nagłówek: mem-grow.c(1 14) 1/ 2 Memory driver, growable 3 Copyright(c) 2010 Michal Nazarewicz(mina86@mina86.com) 4 / 6#include <linux/module.h> 7#include <linux/miscdevice.h> 8#include <linux/fs.h> 9#include <linux/uaccess.h> 10#include <linux/vmalloc.h> 12 MODULE DESCRIPTION( Example growable memory driver ); 13 MODULE AUTHOR( Michal Nazarewicz ); 14 MODULE LICENSE( GPL );
26 Growable, podstawy zarządzania pamięcią Pamięć alokowana dynamicznie zamiast statycznego bufora: mem-grow.c(17 20) 17#definememmaxsize(sizet)(1 <<20) 18 static sizet memcapacity; 19 static sizet memsize; 20 static char memory; Konieczność zwalniania przy wyjściu: mem-grow.c( ) 127 static void exit mem exit(void) 128 { 129 misc deregister(&mem dev); 130 vfree(memory); 131 } 132 module exit(mem exit)
27 Growable, operacja write(2) Operacja write(2) alokuje pamięć przy zapisie: mem-grow.c(87 104) 87 if (!len) 88 return 0; 90 if ( offp >=memmaxsize) 91 return -ENOSPC; 93 ret = ensure capacity(min(( size t)( offp+len), mem max size)); 94 if (unlikely(ret <0)) 95 return ret; 97 len=min(len,(sizet)(memcapacity- offp)); 98 if (unlikely( copyfromuser(memory+ offp,buf,len))) 99 return -EFAULT; 101 offp += len; 102 mem size = max((size t) offp, mem size); 103 printk(kern INFO mem: new size%zu\n, mem size); 104 return len;
28 Growable, alokacja pamięci Co robi ensure capacity()? mem-grow.c(23 44) 23 static int ensurecapacity(sizet capacity) 24 { 25 capacity =(capacity + PAGE MASK)& PAGE MASK; 27 if (mem capacity < capacity) {. 41 } 43 return 0; 44 }
29 Growable, alokacja pamięci, kont. Alokacja: mem-grow.c(28 40) 28 char tmp = vmalloc(capacity); 29 if (unlikely(!tmp)) 30 return-enomem; 32 printk(kern INFO mem: new capacity%zu\n, capacity); 34 if (memory) { 35 memcpy(tmp, memory, mem size); 36 vfree(memory); 37 } 39 memory = tmp; 40 mem capacity = capacity;
30 Growable, testowanie cat mem-grow.ko >/dev/mymem cat/dev/mymem >foo cmp mem-grow.ko foo
31 Synchronised W poprzednim sterowniku występował wyścig. Trzeba dodać mechanizm synchronizujący chroniący dostęp do bufora. Mutex nadaje się idealnie. Funkcjonalność modułu taka jak poprzedniej wersji.
32 Synchronised, deklaracje Dodany nagłówek potrzebny do korzystania z muteksów: mem-sync.c(6 15) 6#include <linux/module.h> 7#include <linux/miscdevice.h> 8#include <linux/fs.h> 9#include <linux/uaccess.h> 10#include <linux/vmalloc.h> 11#include <linux/mutex.h> 13 MODULE DESCRIPTION( Example growable memory driver with synchronisation ); 14 MODULE AUTHOR( Michal Nazarewicz ); 15 MODULE LICENSE( GPL );
33 Synchronised, definicja muteksa Dodajemy mutex: mem-sync.c(18 23) 18 static DEFINE MUTEX(mem mutex); 20#definememmaxsize(sizet)(1 <<20) / mult.ofpagesize / 21 static sizet memcapacity; 22 static sizet memsize; 23 static char memory; / guarded by mutex /
34 Synchronised, operacja read(2) Blokowanie przy odczycie: mem-sync.c(73 87) 73 if ( offp >=memsize!len) 74 return 0; 76 if ( unlikely( mutex lock interruptible(&mem mutex))) 77 return-eintr; 79 len=min(len,(sizet)(memsize- offp)); 80 ret =len; 81 if (unlikely( copytouser(buf,memory+ offp,len))) 82 ret =-EFAULT; 83 else 84 offp += len; 86 mutex unlock(&mem mutex); 87 return ret;
35 Synchronised, operacja write(2) Blokowanie przy zapisie: mem-sync.c( ) 104 if ( unlikely( mutex lock interruptible(&mem mutex))) 105 return -EINTR; 107 ret = ensurecapacity(min((sizet)( offp+len), (sizet)memmaxsize)); 108 if (unlikely(ret <0)) 109 goto done; 111 len=min(len,(sizet)(memcapacity- offp)); 112 ret =-EFAULT; 113 if (likely(! copyfromuser(memory+ offp,buf,len))) { 114 ret = len; 115 offp += len; 116 mem size = max((size t) offp, mem size); 117 printk(kern INFO mem: new size%zu\n, mem size); 118 } 120 done: 121 mutex unlock(&mem mutex); 122 return ret;
36 Parametrised Parametryzowany rozmiar maksymalny(max size). Możliwość zmiany rozmiaru danych(size). Możliwość zmiany rozmiaru bufora(capacity). Dopuszczamy sytuację size > max size, gdy zmniejszamy limit.
37 Parametrised, definicje memmaxsizetoterazzmienna,aniemakro. Dodanememmaxsizelimit(1GiB). Typ zmieniony na unsigned. mem-param.c(18 24) 18 static DEFINE MUTEX(mem mutex); 20#definememmaxsizelimit(unsigned)(1 <<30) 21 static unsignedmemmaxsize=1<<20;/ notguardedbymutex / 22 static unsigned mem capacity; / at times read w/o mutex / 23 static unsigned mem size; / ditto / 24 static char memory;
38 Parametrised, warunek w sekcji krytycznej W funkcjach mem read() warunki sprawdzane przed sekcją krytyczną są sprawdzane również wewnątrz: mem-param.c( ) 153 if ( offp >=memsize!len) 154 return 0; 156 if ( unlikely( mutex lock interruptible(&mem mutex))) 157 return-eintr; 159 if ( offp >=memsize) { 160 ret =0; 161 goto done; 162 }
39 Parametrised, warunek w sekcji krytycznej, kont. Analogicznie w funkcjach mem write(). Dodatkowo zabezpieczamy się przed sytuacją, gdy size>maxsize: mem-param.c( ) 188 if ( offp >= max(mem size, mem max size)) 189 return -ENOSPC; 191 if ( unlikely( mutex lock interruptible(&mem mutex))) 192 return -EINTR; 194 limit = max(mem size, mem max size); 195 if ( offp >=limit) { 196 ret =-ENOSPC; 197 goto done; 198 } 200 ret = ensurecapacity(min((sizet)( offp+len), limit), 0); 201 if (unlikely(ret <0)) 202 goto done; 204 len=min(len,(sizet)(limit - offp));
40 Parametrised, obsługa parametrów Parametry dostarczane jako tekst trzeba parsować: mem-param.c(51 63) 51 static intmemparse(constchar val,intmin,intmax) 52 { 53 unsigned long long num; 54 char endp; 55 num = memparse(val,&endp); 56 if (endp==val) 57 return-einval; 58 if (num >max num <min) 59 return-edom; 60 if ( endp == \n ) 61 ++endp; 62 return endp?-einval: num; 63 }
41 Parametrised, definiowanie parametrów Parametru modułu deklarujemy za pomocą jednej z deklaracji moduleparam*(): mem-param.c( ) 122 module param call(maxsize, param set maxsize, param get uint, 123 &mem max size, 0644); 124moduleparamcall(size, paramsetsize, paramgetuint, 125 &mem size, 0644); 126moduleparamcall(capacity, paramsetcapacity, paramgetuint, 127 &mem capacity, 0644);
42 Parametrised, ustawianie limitu danych Funkcja zmienia maksymalny rozmiar danych. Możliwe, że maksymalny rozmiar będzie mniejszy od aktualnego. Zmiana limitu nie wymaga zajęcia muteksa: mem-param.c(66 75) 66 static int param set maxsize(const char val, struct kernel param kp) 67 { 68 int ret =memparse(val,0,memmaxsizelimit); 69 if (unlikely(ret <0)) 70 return ret; 72 memmaxsize=ret; 74 return 0; 75 }
43 Parametrised, ustawianie rozmiaru danych Funkcja zmieniająca rozmiaru danych. Możliwe zwiększenie wypełniając zerami: mem-param.c(78 103) 78 static int paramsetsize(constchar val, structkernelparam kp) 79 { 80 int ret =memparse(val,0,max(memsize,memmaxsize)); 81 if (unlikely(ret <0)) 82 return ret; 84 if ( unlikely( mutex lock interruptible(&mem mutex))) 85 return-eintr;. 101 mutex unlock(&mem mutex); 102 return ret; 103 }
44 Parametrised, ustawianie rozmiaru danych, kont. Zmiana rozmiaru: mem-param.c(87 99) 87 if (ret <=memsize) { 88 memsize=ret; 89 ret =0; 90 }else if (ret >memmaxsize) { 91 ret =-EDOM; 92 }else { 93 int size =ret; 94 ret = ensurecapacity(size,0); 95 if (likely(ret >=0)) { 96 memset(memory + mem size, 0, size-mem size); 97 memsize=size; 98 } 99 }
45 Parametrised, ustawianie rozmiaru bufora Funkcja zmieniająca rozmiaru bufora(ale nie mniej niż mem size): mem-param.c( ) 106 static int paramsetcapacity(constchar val, structkernelparam kp) 107 { 108 int ret =memparse(val,0,memmaxsizelimit); 109 if (unlikely(ret <0)) 110 return ret; 112 if ( unlikely( mutex lock interruptible(&mem mutex))) 113 return-eintr; 115 ret = ensure capacity(max((unsigned)ret, mem size), 1); 117 mutex unlock(&mem mutex); 118 return ret; 119 }
46 Parametrised, ustawianie rozmiaru bufora, kont. mem-param.c(27 48) 27 static int ensure capacity(unsigned capacity, int force) 28 { 29 capacity =(capacity + PAGE MASK)& PAGE MASK; 31 if (memcapacity <capacity (force &&capacity!=memcapacity)) { 32 char tmp = NULL; 33 if (unlikely(capacity)) { 34 tmp = vmalloc(capacity); 35 if (unlikely(!tmp)) 36 return -ENOMEM; 37 if (memory) { 38 memcpy(tmp, memory, mem size); 39 vfree(memory); 40 } 41 } 43 memory = tmp; 44 mem capacity = capacity; 45 } 47 return 0; 48 }
47 Parametrised, testowanie insmod mem-param.ko maxsize=16k cat/sys/module/mem param/parameters/* cat mem-param.ko >/dev/mymem cat/dev/mymem >foo; cmp mem-param.ko foo cat/sys/module/mem param/parameters/* cat mem-param.c >/dev/mymem echo 1K >/sys/module/mem param/parameters/size cat/dev/mymem
48 O czym była prezentacja? Przedstawiona struktura sterownika inicjacja i czyszczenie. Pokazana implementacja prostych operacji plikowych. Zarządzanie pamięcią przy wykorzystaniu vmalloc(). Podstawy synchronizacji wzajemne wykluczanie przy pomocy muteksa. Jakwidać,toniejestażtaktrudne... Idzie zrozumieć.:)
49 Czego zabrakło? Dane prywatne plików(a nie globalne zmienne). Inneoperacjeplikowe mmap(2),ioctl(2),... Tryb nieblokujący, operacja poll(2). Wykorzystanie kmalloc() czy prywatnych pól pamięci. Inne sposoby synchronizacji zmienne atomowe, spinlocki, liczniki referencji. Proste struktury danych listy, drzewa czerwono-czarne.
50 Atotylkowierzchołekgórylodowej... Komunikacja ze sprzętem. Przerwania. Górne i dolne połówki. DMA. Urządzenia blokowe. Systemy plików. Dziesiątki podsystemów. Testując można sobie popsuć sprzęt! Chybaniemaosoby,którarozumietowszystko...
51 Skąd czerpać informacje Use the source Luke! Podkatalog Documentation w źródłach jądra. Publiczne serwery LXR, np.: Linux Device Drivers, Third Edition udostępniony przez O Reilly: Daniel P. Bovet, Marco Cesati. Understanding the Linux Kernel
52 Dziękuję za uwagę! Pytania? Opinie? Sugestie?
53 Prawnik mi kazał Wszystkie fragmentu kodu źrodłowego dostępna na zasadach licencji: GNU General Public Licence wersji 2 lub dowolnej nowszej; lub nowej licencji BSD. Prezentacja dostępna na zasadach licencji Creative Commons Uznanie autorstwa-użycie niekomercyjne-na tych samych warunkach 3.0 Polska; lub GNU Free Documentation License wersji 1.3 lub dowolnej nowszej bez Invariant Sections, Front-Cover Texts ani Back-Cover Texts. Jeżeli potrzebna jest inna licencja proszę o kontakt.
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.
Synchronizacja w jądrze Linux
Synchronizacja w jądrze Linux Michał Nazarewicz Instytut Informatyki Politechniki Warszawskiej 3 kwietnia 2010 1 Wstęp Po co synchronizować? Synchronizacja w kontekście jądra? 2 Mechanizmy nieblokujące
Linux Kernel II. Hello kernel - jak napisać pierwszy moduł
Linux Kernel II Hello kernel - jak napisać pierwszy moduł Przypomnienie (I) Moduły uruchamiane są i działają w przestrzeni Kernela (Kernel space), Moduły piszemy w języku C, Moduły działają inaczej niż
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ę
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:
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
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,
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,
, Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer
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
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy
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
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ę,
Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe
Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)
external Data Representation
Remote Procedure Call external Data Representation Opis standardu RFC 1014 Kanoniczna reprezentacja danych oparta na formacie IEEE Deklaratywny język opisu struktur danych (zbliżony do języka C) Koncepcja
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
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
Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk
Informatyka Wy-03 Dynamiczna alokacja pamięci, wyjątki mgr inż. Krzysztof Kołodziejczyk krzysztof.m.kolodziejczyk@pwr.edu.pl 13.03.2019 Strona kursu http://w12.pwr.wroc.pl/inf/ Konsultacje Piątek 13:00
Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Wykład 3: Implementacja programów wbudowanych
Systemy wbudowane Wykład 3: Implementacja programów wbudowanych Problemy implementacji oprogramowania wbudowanego Szeregowanie zadań System operacyjny Obsługa przerwań 10/16/2010 S.Deniziak:Systemy wbudowane
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
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
E-3IZ1-05-s5. Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)
Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. KARTA MODUŁU / KARTA PRZEDMIOTU Kod modułu E-3IZ1-05-s5 Nazwa modułu Systemy operacyjne 2 Nazwa modułu w języku angielskim Operating
Informatyka I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny)
Załącznik nr 7 do Zarządzenia Rektora nr 10/12 z dnia 21 lutego 2012r. KARTA MODUŁU / KARTA PRZEDMIOTU Kod modułu Nazwa modułu Systemy operacyjne 2 Nazwa modułu w języku angielskim Operating systems 2
Sun RPC/XDR. Dariusz Wawrzyniak 1
Remote Procedure Call external Data Representation trójwymiarowa identyfikacja procedur (nr programu, nr wersji, nr procedury) protokół RPC oparty na protokołach warstwy transportowej stosu TCP/IP (TCP
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
Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include
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:
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
Sun RPC/XDR 10. listopada Dariusz Wawrzyniak (IIPP) 1
Remote Procedure Call external Data Representation trójwymiarowa identyfikacja procedur (nr programu, nr wersji, nr procedury) protokół RPC oparty na protokołach warstwy transportowej stosu TCP/IP (TCP
external Data Representation
Remote Procedure Call external Data Representation Dariusz Wawrzyniak (IIPP) 1 trójwymiarowa identyfikacja procedur (nr programu, nr wersji, nr procedury) protokół RPC oparty na protokołach warstwy transportowej
Języki i metodyka programowania. Wskaźniki i tablice.
Wskaźniki i tablice. Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
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,
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,
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
Laboratorium 2: Dynamiczny przydział pamięci w przestrzeni jądra Linuksa (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 2: Dynamiczny przydział pamięci w przestrzeni jądra Linuksa (jedne zajęcia) dr inż. Arkadiusz Chrobot 9 marca 2017 Spis treści Wprowadzenie 1 1. Alokatory pamięci 1 2. Alokator strefowy 2
Programowanie Proceduralne
Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14 Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.
Kod szkolenia: Tytuł szkolenia: PS/LINUX Programowanie systemowe w Linux Dni: 5 Opis: Adresaci szkolenia Szkolenie adresowane jest do programistów tworzących aplikacje w systemie Linux, którzy chcą poznać
Dynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
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
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ
w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L
Wykład 12. Zarządzanie pamięcią (część III) oraz urządzenia sieciowe. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 12 Zarządzanie pamięcią (część III) oraz urządzenia sieciowe Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Funkcja mmap na pliku specjalnym Funkcje systemową mmap możemy również
Zmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Kernel Kompilacja jądra
Kernel Kompilacja jądra systemu Co to jest jądro systemu operacyjnego Jądro systemu operacyjnego jest rozpowszechniane na licencji GNU General Public License (GPL) określonej przez konsorcjum Free Software
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
Tablice, funkcje - wprowadzenie
Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład
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
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
PARADYGMATY PROGRAMOWANIA Wykład 2
PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Operatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
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
Programowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Uzupełnienie dot. przekazywania argumentów
Uzupełnienie dot. przekazywania argumentów #include #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct nowa x); reprezentant.k=17;
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
Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.
Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using
Wykład 1
Wstęp do programowania 1 Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Wprowadzenie Cel wykładów z programowania proceduralnego Wykład jest poświęcony językowi C i jego
Systemy operacyjne II
Systemy operacyjne II Wojciech Kwedlo Wydział Informatyki PB, p. 205 wkwedlo@ii.pb.bialystok.pl aragorn.pb.bialystok.pl/~wkwedlo Pracownia specjalistyczna: Wojciech Kwedlo Krzysztof Bandurski Wojciech
Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB
Wykład 7 Podręczna pamięć buforowa (ang. buffer cache) w systemie Linuks Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Wstęp Przyczyną wprowadzenia pamięci buforowej są ogromne różnice
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
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()
KURS C/C++ WYKŁAD 6. Wskaźniki
Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można
Łą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
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ą
Funkcja (podprogram) void
Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji
Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Wprowadzenie do programowania i programowanie obiektowe
Wprowadzenie do programowania i programowanie obiektowe Wirtotechnologia Zajęcia nr 10 autor: Grzegorz Smyk Wydział Odlewnictwa Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza
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,
Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
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
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
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ą
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych
Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,
Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)
Wykład 7 Abstrakcyjne typy danych słownik (lista symboli) Definicja słownika: Słownik (tablica lub lista symboli) to struktura danych zawierająca elementy z kluczami, która pozwala na przeprowadzanie dwóch
Laboratorium 1: Moduły jądra systemu Linux (jedne zajęcia) dr inż. Arkadiusz Chrobot
Laboratorium 1: Moduły jądra systemu Linux (jedne zajęcia) dr inż. Arkadiusz Chrobot 7 marca 017 Spis treści Wprowadzenie 1 1. Prosty moduł jądra 1. Kompilacja modułu 3 3. Obsługa modułów 4 4. Parametry
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.
Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:
Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
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
Wykład 9 Systemy plików w Linuksie
Wykład 9 Systemy plików w Linuksie część druga Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB Obiekt otwartego pliku Dlaczego, oprócz obiektu i-węzła, potrzebny jest obiekt otwartego
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
Stałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne
Wstęp do programowania
Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład
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
SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)
Program my_ping: wysłanie komunikatu ICMP z żądaniem echa Struktura icmp (plik netinet/ip_icmp.h) 0 7 8 15 16 31 TYP (icmp_type) KOD (icmp_code) IDENTYFIKATOR (icmp_id) SUMA KONTROLNA (icmp_cksum) NUMER
Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.
1. Tablice dynamiczne Początkowa zadeklarowana wielkość tablicy czasami może okazać niewystarczająca, lub nadmierna. Dynamiczna alokacja pamięci wykorzystywana jest w celu otrzymania bądź zwolnienia pamięci
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
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie
main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!
Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje