Ghost in the machine

Podobne dokumenty
Biblioteka standardowa - operacje wejścia/wyjścia

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

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

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

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

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

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

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

Podstawy programowania w języku C++

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

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

Programowanie Proceduralne

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

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

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Tablice, funkcje - wprowadzenie

Podstawy programowania w języku C++

INFORMATYKA Studia Niestacjonarne Elektrotechnika

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

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Programowanie w językach wysokiego poziomu

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

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

Programowanie Procedurale. Pliki w języku C++

7 Przygotował: mgr inż. Maciej Lasota

Klasa iostream... 1 Klasy ofstream, ifstream Struktura FILE... 8

Uzupełnienie dot. przekazywania argumentów

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

Podstawy programowania w języku C++

W języku C każdy plik fizyczny jest ciągiem bajtów, z których każdy może być niezależnie odczytany. Borland 01234

Struktury. Przykład W8_1

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

Podstawy Programowania

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Podstawy programowania w języku C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Strumienie i pliki. Programowanie Proceduralne 1

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Języki i metody programowania I

Lab 9 Podstawy Programowania

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

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Stałe i zmienne znakowe. Stała znakowa: znak

Operacje wejścia/wyjścia (odsłona druga) - pliki

Wskaźniki. Programowanie Proceduralne 1

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Programowanie w językach

Wskaźniki, funkcje i tablice

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Operacje wejścia/wyjścia odsłona pierwsza

Podstawy programowania komputerów

Bardzo szybkie podsumowanie: wykład 5

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

dr inż. Paweł Myszkowski Wykład nr 8 ( )

2 Przygotował: mgr inż. Maciej Lasota

Tablice deklaracja, reprezentacja wewnętrzna

Tablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ

Wprowadzenie do programowania w języku C

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

Programowanie w języku C++

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

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.

Struktury czyli rekordy w C/C++

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Bardzo szybkie podsumowanie: wykład 4

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

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

Argumenty wywołania programu, operacje na plikach

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wskaźniki w C. Anna Gogolińska

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Podstawy programowania w języku C++

dr inż. Jarosław Forenc

Stałe, tablice dynamiczne i wielowymiarowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Operacje na plikach (niskiego poziomu) < IO.H >

DYNAMICZNE PRZYDZIELANIE PAMIECI

KURS C/C++ WYKŁAD 6. Wskaźniki

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Tablice, funkcje, wskaźniki - wprowadzenie

Transkrypt:

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 Wst malloc, free, sizeof Funkcja malloc alokuje pamieć o rozmiarze size i zwraca wskaźnik do poczatku obszaru zaalokowanej pamieci. Pamieć pobrana przy pomocy malloc jest zajeta aż do chwili jej zwrócenia przez wywo lanie funkcji free. #i n c l u d e <s t d i o. h> #i n c l u d e < s t d l i b. h> /* v o i d * m a l l o c ( s i z e t NBYTES ) ; v o i d f r e e ( v o i d *APTR ) ; */ i n t main ( ) { i n t n ; s c a n f ( %d, &n ) ; double *a = m a l l o c ( n * s i z e o f ( double ) ) ; i f ( n > 3) { *( a + 3) = 2. 0 ; a [ 1 ] = 1. 0 ; p r i n t f ( %f %f \n, a [ 1 ], a [ 3 ] ) ; f r e e ( a ) ; r e t u r n 0 ;

Funkcje operujace Wstep do operacji I/O na plikach memset #i n c l u d e <s t d i o. h> #i n c l u d e < s t r i n g. h> /* void *memset ( const void *DST, i n t C, s i z e t LENGTH ) ; Funkcja konwertuje argument C do typu unsigned char (1 bajtowy ) i w y p e l n i a LENGTH bajtow p a m i e c i t a w a r t o s c i a z a c z y n a j a c od a d r e s u wskazywanego p r z e z DST */ i n t main ( ) { double a [ 5 ] = {1, 2, 4, 5, 9 ; f o r ( unsigned i = 0 ; i < 5 ; ++i ) p r i n t f ( a[%d ] = %f \n, i, a [ i ] ) ; memset ( a, 0, 5 * s i z e o f ( double ) ) ; f o r ( unsigned i = 0 ; i < 5 ; ++i ) p r i n t f ( a[%d ] = %f \n, i, a [ i ] ) ; r e t u r n 0 ;

Funkcje operujace Wst calloc, realloc #i n c l u d e < s t d l i b. h> /* v o i d * c a l l o c ( s i z e t N, s i z e t S ) ; zwraca wskaznik do p r z y d z i e l o n e g o bloku pamieci : takiego, ktory pomiesci N elementow, kazdy o rozmiarze S ; kazdy bajt zwracanego obszaru pamieci j e s t ustawiany na 0 */ v o i d * r e a l l o c ( v o i d *PTR, s i z e t NBYTES ) ; J e z e l i PTR j e s t wskaznikiem na w c z e s n i e j p r z y d z i e l o n a dynamicznie pamiec, to r e a l l o c pozwala zmienic wielkosc przydzielonego obszaru na NBYTES, nie zmieniajac jego poczatkowej zawartosci. i n t main ( ) { double *a = c a l l o c ( 5, s i z e o f ( double ) ) ; /* dokladnie rownowazne sekwencji : malloc, memset */ double *b = m a l l o c (5 * s i z e o f ( double ) ) ; memset ( b, 0, 5 * s i z e o f ( double ) ) ; r e a l l o c ( a, 3 * s i z e o f ( double ) ) ; // zmniejszamy do t r z e c h r e a l l o c ( a, 7 * s i z e o f ( double ) ) ; // zwiekszamy do s i e d m i u r e t u r n 0 ;

Funkcje operujace Wst memcpy, memmove #i n c l u d e <s t d i o. h> #i n c l u d e < s t r i n g. h> /* void *memcpy ( void *OUT, const void *IN, s i z e t N ) ; void *memmove( void *OUT, const void *IN, s i z e t N ) ; memcpy k o p i u j e N bajtow z o b s z a r u p a m i e c i wskazywanego p r z e z IN do o b s z a r u wskazywanego p r z e z OUT, o b s z a r y IN i OUT nie powinny s i e nakladac ; memmove pozwala o b s l u z y c poprawnie k o p i o w a n i e w przypadku nakladajacych s i e obszarow IN i OUT; */ i n t main ( ) { double a [ 5 ] = {1, 2, 4, 5, 9 ; f o r ( unsigned i = 0 ; i < 5 ; ++i ) p r i n t f ( a[%d ] = %f \n, i, a [ i ] ) ; memcpy ( a + 3, a, 2 * s i z e o f ( double ) ) ; f o r ( unsigned i = 0 ; i < 5 ; ++i ) p r i n t f ( a[%d ] = %f \n, i, a [ i ] ) ; memmove( a + 1, a, 2 * s i z e o f ( double ) ) ; f o r ( unsigned i = 0 ; i < 5 ; ++i ) p r i n t f ( a[%d ] = %f \n, i, a [ i ] ) ; r e t u r n 0 ;

Funkcje operujace Wst stdin, stdout, stderr Podstawowym pojeciem dla operacji wejścia/wyjścia jest strumień. Stanowi on źród lo lub cel danych. Strumień wiaże sie z plikiem lub urzadzeniem za pomoca otwarcia, po l aczenie to zrywa sie za pomoca zamkniecia. W momencie uruchomienia programu dysponuje on szczególnymi trzema strumieniami, które sa już otwarte: stdin - standardowe wejście stdout - standardowe wyjście stderr - standardowe wyjście b l edów

Funkcje operujace Wst getchar, putchar #i n c l u d e <s t d i o. h> /* i n t g e t c h a r ( v o i d ) ; i n t p u t c h a r ( i n t ) ; */ getchar zwraca znak pobrany ze standardowego wejscia, efektem ubocznym j e s t p r z e s u n i e c i e s i e w tym s t r u m i e n i u na n a s t e p n a p o z y c j e ; putchar wypisuje otrzymany znak na standardowe wyjscie, efektem ubocznym j e s t p r z e s u n i e c i e s i e w tym s t r u m i e n i u na n a s t e p n a p o z y c j e, w a r t o s c zwracana p r z e z p u t c h a r to otrzymany argument ( s u k c e s ) l u b EOF ( b l a d ) ; i n t main ( ) { i n t c ; c = g e t c h a r ( ) ; w h i l e ( c!= EOF) { p u t c h a r ( c ) ; c = g e t c h a r ( ) ; r e t u r n 0 ;

Funkcje operujace Wst printf, scanf #i n c l u d e <s t d i o. h> i n t p r i n t f ( c o n s t char *format,... ) ; i n t s c a n f ( c o n s t char *format,... ) ; /* p r i n t f pod nadzorem argumentu format przeksztalca, f o r m a t u j e i w y p i s u j e s w o j e k o l e j n e argumenty na standardowe w y j s c i e ; scanf wczytuje znaki ze standardowego wejścia, i n t e r p r e t u j e j e z g o d n i e ze s p e c y f i k a c j a zawarta w argumencie format i z a p a m i e t u j e w y n i k i w miejscach określonych przez k o l e j n e argumenty. */ Format zawiera: zwyk le znaki specyfikacje przekszta lceń - rozpoczynajace sie od % i kończace znakiem przekszta lcenia Zapraszam do lektury. Przyk lady, korekta do [BK, DR] i dyskusja - w czwartek.

Funkcje operujace Wstep do operacji I/O na plikach sprintf i n t s p r i n t f ( char *s, c o n s t char *format,... ) ; dzia la tak samo jak printf, przy czym rol e wyjścia spe lnia tablica s na końcu wyniku dodawany jest znak pusty tablica s musi być dostatecznie duża, żeby pomieścić wynik wartość zwracana (liczba wypisanych znaków) nie uwzgl ednia końcowego znaku pustego

Funkcje operujace Wstep do operacji I/O na plikach sscanf i n t s s c a n f ( char *s, c o n s t char *format,... ) ; dzia la tak samo jak sscanf rol e wejścia pe lni tablica s

Funkcje operujace Wstep do operacji I/O na plikach fopen FILE *fopen ( c o n s t char * f i l e, c o n s t char *mode ) ; Funkcja fopen otwiera (zwiazuje ze strumieniem) plik o nazwie file. Funkcja otwiera plik w trybie mode i zwraca wskaźnik do pliku (typu FILE*) lub w przypadku b l edu wskaźnik NULL. Otrzymany wskaźnik do pliku może być później użyty jako argument w funkcjach wykonujacych operacje wejścia/wyjścia.

Funkcje operujace Wst Na jakie sposoby można otworzyć plik? Możliwe tryby otwarcia to: r - czytanie, plik musi istnieć w - pisanie, jeśli plik istnieje to zostanie nadpisany; jeśli nie, to utworzony a - dopisywanie, poprzednia zawartość jest zachowywana; jeśli plik nie istnieje, to zostanie utworzony przy otwieraniu plików binarnych należy do lożyć b - np. wb #i n c l u d e <s t d i o. h> i n t main ( ) { FILE* ostream = fopen ( mojplik. dat, w ) ; putc ( a, ostream ) ; // w y p i s u j e znak a do p l i k u f c l o s e ( ostream ) ; // zamyka p l i k r e t u r n 0 ;

Funkcje operujace Wstep do operacji I/O na plikach fclose i n t f c l o s e ( FILE * stream ) ; zamyka plik, czyli zrywa jego po l aczenie ze strumieniem zwraca 0 (sukces) lub EOF (b l ad) wskaźnik do pliku zostaje zwolniony - istotne dla systemów z ograniczeniami na liczbe otwartych plików efektem ubocznym jest opróżnienie buforów wejściowych po l aczone z wypisaniem nie wypisanych dotad danych zwiazanych ze strumieniem

Funkcje operujace Wst stdin/stdout/stderr raz jeszcze stdin, stdout, stderr też sa typu FILE* (sa wskaźnikami do plików) można ich użyć przy wywo laniu dowolnej funkcji przyjmujacej argument typu FILE* #i n c l u d e <s t d i o. h> i n t main ( ) { i n t l i c z b a ; FILE* ostream = fopen ( moj plik. dat, w ) ; s c a n f ( %d, &l i c z b a ) ; f p r i n t f ( ostream, Ala ma %d koty, l i c z b a ) ; f p r i n t f ( s t d o u t, Ala ma %d koty, l i c z b a ) ; f c l o s e ( s t d o u t ) ; // to t e z mozna z r o b i c f c l o s e ( ostream ) ;

Funkcje operujace Wst fprintf, fscanf i n t f p r i n t f ( FILE* stream, c o n s t char *format,... ) ; i n t f s c a n f ( FILE* stream, c o n s t char *format,... ) ; dzia laj a jak printf i scanf strumień na którym operuja jest definiowany przez wskaźnik stream (wskaźnik do pliku) fprintf(stdout,...) odpowiada printf(...) fscanf(stdin,...) odpowiada scanf(...)

Funkcje operujace Wst getc, putc, ungetc i n t g e t c ( FILE * stream ) ; i n t putc ( i n t c, FILE * stream ) ; i n t ungetc ( i n t c, FILE * stream ) ; getc i putc dzia laj a odpowiednio jak getchar i putchar strumień na którym operuja jest definiowany przez wskaźnik stream (wskaźnik do pliku) ungetc pozwala wycofać znak c do strumienia stream - zostanie on pobrany przy nast epnym odczycie ze strumienia dla danego strumienia wycofać można tylko jeden znak nie można wycofać znacznika końca pliku(eof)