dr inż. Jarosław Forenc

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

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

Zaliczenie przedmiotu:

dr inż. Jarosław Forenc

Biblioteka standardowa - operacje wejścia/wyjścia

Programowanie w językach wysokiego poziomu

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

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

dr inż. Jarosław Forenc

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

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

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

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

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

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

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

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

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

Spis treści JĘZYK C - PLIKI BINARNE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF30

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

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Strumienie i pliki. Programowanie Proceduralne 1

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

Programowanie Proceduralne

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

7 Przygotował: mgr inż. Maciej Lasota

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

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

Ghost in the machine

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

Podstawy programowania w języku C++

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

Informatyka 2. Informatyka 2. Wykład nr 1 ( ) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Podstawy programowania w języku C++

Argumenty wywołania programu, operacje na plikach

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

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

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

2 Przygotował: mgr inż. Maciej Lasota

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania w języku C++

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

Spis treści PLIKI TEKSTOWE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

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

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Programowanie w językach

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

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

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Programowanie Procedurale. Pliki w języku C++

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

#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 ); }

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

1. Wprowadzanie danych z klawiatury funkcja scanf

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

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

Podstawy programowania w języku C++

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

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

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

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

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

Programowanie strukturalne i obiektowe

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

Wstęp do programowania. Wykład 1

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

Wykład PASCAL - Pliki tekstowe

Pliki wykład 2. Dorota Pylak

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

Zmienne, stałe i operatory

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Tablice, funkcje - wprowadzenie

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

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

Transkrypt:

Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2014/2015 Wykład nr 1 (09.10.2014)

Rok akademicki 2014/2015, Wykład nr 1 2/66 Dane podstawowe Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, 15-351 Białystok WE-204 e-mail: j.forenc@pb.edu.pl tel. (0-85) 746-93-97 http://we.pb.edu.pl/~jforenc Dydaktyka - slajdy prezentowane na wykładzie konsultacje: poniedziałek, godz. 08:30-10:00, WE-204 piątek, godz. 13:00-14:30, WE-204 sobota, godz. 15:05-16:35, WE-204 (zaoczne)

Rok akademicki 2014/2015, Wykład nr 1 3/66 Przedmioty Informatyka 1 i Informatyka 2 Informatyka 1 semestr II wykład: 15 godz. (J. Forenc) pracownia specjalistyczna: 30 godz. (A. Choroszucho, J. Forenc) ECTS: 4 pkt. kod przedmiotu: ES1C200 009 Informatyka 2 semestr III wykład: 15 godz. (J. Forenc) pracownia specjalistyczna: 30 godz. (J. Forenc) ECTS: 3 pkt. kod przedmiotu: ES1C300 016

Rok akademicki 2014/2015, Wykład nr 1 4/66 Program wykładu (1/2) 1. Operacje wejścia-wyjścia w języku C: znakowe, łańcuchowe, sformatowane, rekordowe. Strumienie. Pliki tekstowe i binarne. 2. Wskaźniki, operacje na wskaźnikach. Dynamiczny przydział pamięci w języku C. 3. Programowanie obiektowe w języku C++: operacje wejściawyjścia, klasy i obiekty, dane i funkcje składowe, prawa dostępu do składników klasy, definiowanie funkcji składowych klasy, konstruktory i destruktory. 4. Programowanie obiektowe w języku C++: funkcje zaprzyjaźnione, przeładowanie operatorów, dziedziczenie, funkcje wirtualne. 5. Sprawdzian nr 1.

Rok akademicki 2014/2015, Wykład nr 1 5/66 Program wykładu (2/2) 6. System operacyjny. Funkcje i zadania systemu operacyjnego. Zarządzanie procesami, pamięcią i dyskami. 7. Sieci komputerowe. Technologie, protokoły, urządzenia. Zasada działania sieci Internet. 8. Sprawdzian nr 2.

Rok akademicki 2014/2015, Wykład nr 1 6/66 Literatura (1/2) 1. S. Prata: Język C. Szkoła programowania. Wydanie V. Helion, Gliwice, 2006. 2. B.W. Kernighan, D.M. Ritchie: Język ANSI C. Programowanie. Wydanie II. Helion, Gliwice, 2010. 3. R. Reese: Wskaźniki w języku C. Przewodnik. Helion, Gliwice, 2014. 4. J. Grębosz: Symfonia C++ standard: programowanie w języku C++ orientowane obiektowo. Tom 1 i 2. Wydawnictwo Edition 2000, Kraków, 2008. 5. B. Stroustrup: Programowanie. Teoria i praktyka z wykorzystaniem C++. Wydanie II poprawione. Helion, Gliwice, 2013. 6. B. Eckel: Thinking in C++. Edycja polska. Helion, Gliwice, 2002.

Rok akademicki 2014/2015, Wykład nr 1 7/66 Literatura (2/2) 7. A.S. Tanenbaum: Systemy operacyjne. Wydanie III. Helion, Gliwice, 2010. 8. W. Stallings: Systemy operacyjne. Struktura i zasady budowy. Mikom, Warszawa, 2006. 9. A.S. Tanenbaum, D.J. Wetherall: Sieci komputerowe. Wydanie V. Helion, Gliwice, 2012. 10. K. Krysiak: Sieci komputerowe. Kompendium. Wydanie II. Helion, Gliwice, 2005.

Rok akademicki 2014/2015, Wykład nr 1 8/66 Zaliczenie wykładu - efekty kształcenia (EK1) Student, który zaliczył przedmiot: opisuje podstawowe zadania systemu operacyjnego oraz strukturę sieci komputerowych Student, który zalicza na ocenę dostateczny (3): podaje definicję i wymienia podstawowe zadania systemu operacyjnego opisuje wybraną metodę szeregowania żądań dostępu do dysku oraz wybraną metodę przydziału pamięci dyskowej wyjaśnia podstawowe pojęcia związane z sieciami komputerowymi charakteryzuje wybrane media transmisyjne i urządzenia sieciowe

Rok akademicki 2014/2015, Wykład nr 1 9/66 Zaliczenie wykładu - efekty kształcenia (EK1) Student, który zaliczył przedmiot: opisuje podstawowe zadania systemu operacyjnego oraz strukturę sieci komputerowych Student, który zalicza na ocenę dobry (4) (oprócz wymagań na ocenę 3): podaje strukturę dysku logicznego w wybranym systemie plików (FAT, NTFS, ext) wyjaśnia pojęcia stronicowania i segmentacji pamięci oraz opisuje zasadę działania pamięci wirtualnej charakteryzuje podstawowe protokoły sieciowe oraz topologie sieci komputerowych

Rok akademicki 2014/2015, Wykład nr 1 10/66 Zaliczenie wykładu - efekty kształcenia (EK1) Student, który zaliczył przedmiot: opisuje podstawowe zadania systemu operacyjnego oraz strukturę sieci komputerowych Student, który zalicza na ocenę bardzo dobry (5) (oprócz wymagań na ocenę 4): opisuje sposób przechowywania informacji o położeniu pliku na dysku w wybranym systemie plików (FAT, NTFS, ext) opisuje modele ISO/OSI i TCP/IP stosowane w sieciach komputerowych

Rok akademicki 2014/2015, Wykład nr 1 11/66 Zaliczenie wykładu - efekty kształcenia (EK2) Student, który zaliczył przedmiot: pisze i uruchamia programy zorientowane obiektowo stosując konstruktory, destruktory oraz deklaracje przyjaźni Student, który zalicza na ocenę dostateczny (3): wyjaśnia podstawowe pojęcia związane z programowaniem obiektowym charakteryzuje strumienie i operatory odpowiadające za wczytywanie i wyświetlanie danych w języku C++ oraz wyjaśnia zasadę działania manipulatorów sterujących formatem wejścia-wyjścia opisuje definicję i składniki klasy oraz prawa dostępu do składników klasy; podaje przykładową definicję klasy podaje przeznaczenie oraz sposób definiowania konstruktorów i destruktorów; wyjaśnia co to są i kiedy są stosowane funkcje zaprzyjaźnione z klasą

Rok akademicki 2014/2015, Wykład nr 1 12/66 Zaliczenie wykładu - efekty kształcenia (EK2) Student, który zaliczył przedmiot: pisze i uruchamia programy zorientowane obiektowo stosując konstruktory, destruktory oraz deklaracje przyjaźni Student, który zalicza na ocenę dobry (4) (oprócz wymagań na ocenę 3): wyjaśnia na czym polega przeładowanie/przeciążenie nazwy funkcji i kiedy jest stosowane w definicji klasy opisuje rolę wskaźnika this w funkcjach składowych klasy charakteryzuje operatory języka C++ przeznaczone do dynamicznego przydziału i zwalniania pamięci

Rok akademicki 2014/2015, Wykład nr 1 13/66 Zaliczenie wykładu - efekty kształcenia (EK2) Student, który zaliczył przedmiot: pisze i uruchamia programy zorientowane obiektowo stosując konstruktory, destruktory oraz deklaracje przyjaźni Student, który zalicza na ocenę bardzo dobry (5) (oprócz wymagań na ocenę 4): charakteryzuje konstruktory kopiujące i domniemane, wyjaśnia kiedy są wywoływane opisuje zastosowanie dziedziczenia i funkcji wirtualnych w programowaniu obiektowym

Rok akademicki 2014/2015, Wykład nr 1 14/66 Zaliczenie wykładu - efekty kształcenia (EK3) Student, który zaliczył przedmiot: tworzy w programach zorientowanych obiektowo funkcje przeładowujące operatory Student, który zalicza na ocenę dostateczny (3): opisuje strukturę funkcji przeładowującej operator, podaje przykład takiej funkcji wyjaśnia różnice w definicji funkcji przeładowującej operator, w przypadku, gdy jest ona funkcją składową klasy i funkcją globalną

Rok akademicki 2014/2015, Wykład nr 1 15/66 Zaliczenie wykładu - efekty kształcenia (EK3) Student, który zaliczył przedmiot: tworzy w programach zorientowanych obiektowo funkcje przeładowujące operatory Student, który zalicza na ocenę dobry (4) (oprócz wymagań na ocenę 3): charakteryzuje funkcje przeładowujące operatory jednoi dwuargumentowe charakteryzuje funkcje przeładowujące operatory: << i >> Student, który zalicza na ocenę bardzo dobry (5) (oprócz wymagań na ocenę 4): wyjaśnia kiedy konieczne jest przeładowanie operatora przypisania (=)

Rok akademicki 2014/2015, Wykład nr 1 16/66 Zaliczenie wykładu Dwa sprawdziany pisemne: sprawdzian 1: 04.12.2014 (czwartek), godz. 12:15-13:00, WE-Aula III sprawdzian 2: 29.01.2015 (czwartek), godz. 13:15-14:00, WE-Aula III poprawa: termin do ustalenia (sesja egzaminacyjna) Ocena końcowa jest średnią arytmetyczną trzech ocen za trzy EK: ocena punkty średnia ocena końcowa 5 5,0 4,75-5,00 5 5-4,8 4,25-4,74 4,5 4,5 4,5 3,75-4,24 4 4 4,0 3,25-3,74 3,5 4-3,8 3,00-3,24 3 3,5 3,5 3 3,0 2 2,0

Rok akademicki 2014/2015, Wykład nr 1 17/66 Terminy zajęć Wykład nr 1-09.10.2014 Wykład nr 2-23.10.2014 Wykład nr 3-06.11.2014 Wykład nr 4-20.11.2014 Wykład nr 5-04.12.2014 (sprawdzian nr 1) Wykład nr 6-18.12.2014 Wykład nr 7-15.01.2015 Wykład nr 8-29.01.2015 (1h, 13:15-14:00, sprawdzian nr 2)

Rok akademicki 2014/2015, Wykład nr 1 18/66 Plan wykładu nr 1 Operacje wejścia-wyjścia w języku C Strumienie Operacje na plikach otwarcie pliku zamknięcie pliku Typy operacji wejścia-wyjścia znakowe łańcuchowe sformatowane rekordowe (blokowe)

Rok akademicki 2014/2015, Wykład nr 1 19/66 Operacje wejścia-wyjścia wyjścia w języku C Operacje wejścia-wyjścia nie są elementami języka C Zostały zrealizowane jako funkcje zewnętrzne, znajdujące się w bibliotekach dostarczanych wraz z kompilatorem Standardowe wejście-wyjście (strumieniowe) plik nagłówkowy stdio.h duża liczba funkcji, proste w użyciu ukrywa przed programistą szczegóły wykonywanych operacji Systemowe wejście-wyjście (deskryptorowe, niskopoziomowe) plik nagłówkowy io.h mniejsza liczba funkcji programista sam obsługuje szczegóły wykonywanych operacji funkcje bardziej zbliżone do systemu operacyjnego - działają szybciej

Rok akademicki 2014/2015, Wykład nr 1 20/66 Typy standardowych operacji wejścia-wyjściawyjścia znakowe getc() - putc() getchar() - putchar() fgetc() - fputc() ungetc() sformatowane scanf() - printf() fscanf() - fprintf() sscanf() - sprintf() łańcuchowe gets() - puts() fgets() - fputs() rekordowe (blokowe) fread() - fwrite() fgetpos() - fsetpos() fseek() ftell() rewind()

Rok akademicki 2014/2015, Wykład nr 1 21/66 Strumienie Standardowe operacje wejścia-wyjścia opierają się na strumieniach (ang. stream) Strumień jest pojęciem abstrakcyjnym - jego nazwa bierze się z analogii między przepływem danych, a np. wody W strumieniu dane płyną od źródła do odbiorcy Użytkownik określa źródło i odbiorcę, typ danych oraz sposób ich przesyłania Strumień może być skojarzony ze zbiorem danych znajdujących się na dysku (plik) lub zbiorem danych pochodzących z urządzenia znakowego (klawiatura) Niezależnie od fizycznego medium, z którym strumień jest skojarzony, wszystkie strumienie mają podobne właściwości

Rok akademicki 2014/2015, Wykład nr 1 22/66 Strumienie Strumienie reprezentowane są przez zmienne będące wskaźnikami na struktury typu FILE (definicja w pliku stdio.h) struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; Podczas pisania programów nie ma potrzeby bezpośredniego odwoływania się do pól tej struktury

Rok akademicki 2014/2015, Wykład nr 1 23/66 Strumienie W każdym programie automatycznie tworzone są i otwierane trzy standardowe strumienie wejścia-wyjścia: stdin - standardowe wejście, skojarzone z klawiaturą stdout - standardowe wyjście, skojarzone z ekranem monitora stderr - standardowe wyjście dla komunikatów o błędach, skojarzone z ekranem monitora _CRTIMP FILE * cdecl iob_func(void); #define stdin (& iob_func()[0]) #define stdout (& iob_func()[1]) #define stderr (& iob_func()[2]) Funkcja printf() niejawnie używa strumienia stdout, zaś funkcja scanf() niejawnie używa strumienia stdin

Rok akademicki 2014/2015, Wykład nr 1 24/66 Operacje na plikach Strumień wiąże się z plikiem za pomocą otwarcia, zaś połączenie to jest przerywane przez zamknięcie strumienia Operacje związane z przetwarzaniem pliku zazwyczaj składają się z trzech części 1. Otwarcie pliku (strumienia): - funkcje: fopen() 2. Operacje na pliku (strumieniu), np. czytanie, pisanie: - funkcje dla plików tekstowych: fprintf(), fscanf(), fgetc(), fputc(), fgets(), fputs() - funkcje dla plików binarnych: fread(), fwrite(), 3. Zamknięcie pliku (strumienia): - funkcja: fclose()

Rok akademicki 2014/2015, Wykład nr 1 25/66 Otwarcie pliku - fopen() FOPEN stdio.h FILE* fopen(const char *fname, const char *mode); Otwiera plik o nazwie fname, nazwa może zawierać całą ścieżkę dostępu do pliku mode określa tryb otwarcia pliku: "r" - odczyt "w" - zapis - jeśli pliku nie ma to zostanie on utworzony, jeśli plik istnieje, to jego poprzednia zawartość zostanie usunięta "a" - zapis (dopisywanie) - dopisywanie danych na końcu istniejącego pliku, jeśli pliku nie ma to zostanie utworzony

Rok akademicki 2014/2015, Wykład nr 1 26/66 Otwarcie pliku - fopen() FOPEN stdio.h FILE* fopen(const char *fname, const char *mode); Otwiera plik o nazwie fname, nazwa może zawierać całą ścieżkę dostępu do pliku mode określa tryb otwarcia pliku: "r+" - uaktualnienie (zapis i odczyt) "w+" - uaktualnienie (zapis i odczyt) - jeśli pliku nie ma to zostanie on utworzony, jeśli plik istnieje, to jego poprzednia zawartość zostanie usunięta "a+" - uaktualnienie (zapis i odczyt) - dopisywanie danych na końcu istniejącego pliku, jeśli pliku nie ma to zostanie utworzony, odczyt może dotyczyć całego pliku, zaś zapis może polegać tylko na dodawaniu nowych danych

Rok akademicki 2014/2015, Wykład nr 1 27/66 Otwarcie pliku - fopen() FOPEN stdio.h FILE* fopen(const char *fname, const char *mode); Zwraca wskaźnik na strukturę FILE skojarzoną z otwartym plikiem Gdy otwarcie pliku nie powiodło się to zwraca NULL Zawsze należy sprawdzać, czy otwarcie pliku powiodło się Po otwarciu pliku odwołujemy się do niego przez wskaźnik pliku Domyślnie plik jest otwierany w trybie tekstowym, natomiast dodanie litery "b" w trybie otwarcie oznacza tryb binarny

Rok akademicki 2014/2015, Wykład nr 1 28/66 Otwarcie pliku - fopen() Przykłady wywołania funkcji fopen(): FILE *stream1, *stream2, *stream3; stream1 = fopen("dane.txt","r"); stream2 = fopen("c:\\baza\\data.bin","wb"); stream3 = fopen("wynik.txt","wt"); dane.txt - tryb tekstowy, tylko do odczytu data.bin - tryb binarny, tylko do zapisu wynik.txt - tryb tekstowy, tylko do zapisu

Rok akademicki 2014/2015, Wykład nr 1 29/66 Zamknięcie pliku - fclose() FCLOSE int fclose(file *stream); stdio.h Zamyka plik wskazywany przez stream Zwraca 0 (zero) jeśli zamknięcie pliku było pomyślne W przypadku wystąpienia błędu zwraca EOF #define EOF (-1) Po zamknięciu pliku, wskaźnik stream może być wykorzystany do otwarcia innego pliku W programie może być jednocześnie otwartych wiele plików

Rok akademicki 2014/2015, Wykład nr 1 30/66 Przykład: otwarcie i zamknięcie pliku #include <stdio.h> int main() { FILE *stream; stream = fopen("plik.txt","w"); if (stream == NULL) { printf("blad otwarcia pliku.\n"); return (-1); } /* przetwarzanie pliku */ fclose(stream); } return (0);

Rok akademicki 2014/2015, Wykład nr 1 31/66 Format (plik) tekstowy i binarny Przykład zawartości pliku tekstowego: Przykład zawartości pliku binarnego:

Rok akademicki 2014/2015, Wykład nr 1 32/66 Format (plik) tekstowy i binarny Dane w pliku tekstowym zapisane są w postaci kodów ASCII Deklaracja i inicjalizacja zmiennej x typu int: int x = 123456; W pamięci komputera zmienna x zajmuje 4 bajty: Po zapisaniu wartości zmiennej x do pliku tekstowego znajdzie się w nim 6 bajtów zawierających kody ASCII kolejnych cyfr 00110001 00110010 00110011 00110100 00110101 00110110 (2) '1' '2' '3' '4' '5' '6' znaki

Rok akademicki 2014/2015, Wykład nr 1 33/66 Format (plik) tekstowy i binarny Dane w pliku tekstowym zapisane są w postaci kodów ASCII Deklaracja i inicjalizacja zmiennej x typu int: int x = 123456; W pamięci komputera zmienna x zajmuje 4 bajty: Po zapisaniu wartości zmiennej x do pliku binarnego znajdą się w nim 4 bajty o takiej samej zawartości jak w pamięci komputera

Rok akademicki 2014/2015, Wykład nr 1 34/66 Format (plik) tekstowy i binarny Elementami pliku tekstowego są wiersze o różnej długości W systemach DOS/Windows każdy wiersz pliku tekstowego zakończony jest parą znaków: CR (carriage return) - powrót karetki, kod ASCII - 13 (10) = 0D (16) = '\r' LF (line feed) - przesunięcie o wiersz, kod ASCII - 10 (10) = 0A (16) = '\n' Załóżmy, że plik tekstowy ma postać: Rzeczywista zawartość pliku jest następująca:

Rok akademicki 2014/2015, Wykład nr 1 35/66 Format (plik) tekstowy i binarny W systemie Linux każdy wiersz pliku tekstowego zakończony jest tylko jednym znakiem: LF (line feed) - przesunięcie o wiersz, kod ASCII - 10 (10) = 0A (16) = '\n' Załóżmy, że plik tekstowy ma postać: Rzeczywista zawartość pliku jest następująca: Pliki binarne nie mają ściśle określonej struktury

Rok akademicki 2014/2015, Wykład nr 1 36/66 Tryby otwarcia pliku: tekstowy i binarny Różnice pomiędzy trybem tekstowym i binarnym otwarcia pliku dotyczą innego traktowania znaków: nowej linii (CR, LF) końca pliku (Ctrl+Z - kod 1A (16) ) W trybie tekstowym: przy odczycie pliku para znaków CR, LF jest tłumaczona na znak nowej linii (LF) przy zapisie pliku znak nowej linii (LF) jest zapisywany w postaci dwóch znaków (CR, LF) W trybie binarnym: przy odczycie i zapisie para znaków CR, LF jest traktowana zawsze jako dwa znaki

Rok akademicki 2014/2015, Wykład nr 1 37/66 Tryby otwarcia pliku: tekstowy i binarny W trybie tekstowym: koniec pliku jest sygnalizowany po napotkaniu znaku Ctrl-Z W trybie binarnym: śledzona jest całkowita długość pliku koniec pliku sygnalizowany jest wartością całkowitą -1 (FFFF (16) ) zdefiniowaną w postaci stałej EOF (end of file)

Rok akademicki 2014/2015, Wykład nr 1 38/66 Znakowe operacje wejścia-wyjściawyjścia GETC int getc(file *stream); stdio.h Pobiera jeden znak z aktualnej pozycji otwartego strumienia stream i uaktualnia pozycję Zmienna stream powinna wskazywać strukturę FILE reprezentującą strumień skojarzony z otwartym plikiem lub jeden ze standardowo otwartych strumieni - np. stdin Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wartość całkowitą kodu wczytanego znaku Jeśli wystąpił błąd lub przeczytany został znacznik końca pliku, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 39/66 Znakowe operacje wejścia-wyjściawyjścia PUTC int putc(int znak, FILE *stream); stdio.h Wpisuje znak do otwartego strumienia reprezentowanego przez argument stream Zmienna stream powinna wskazywać strukturę FILE reprezentującą strumień skojarzony z otwartym plikiem lub jeden ze standardowo otwartych strumieni - np. stdout Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wypisany znak Jeśli wystąpił błąd, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 40/66 Znakowe operacje wejścia-wyjściawyjścia GETCHAR int getchar(void); stdio.h Pobiera znak ze strumienia stdin (klawiatura) Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca przeczytany znak Jeśli wystąpił błąd albo został przeczytany znacznik końca pliku, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 41/66 Znakowe operacje wejścia-wyjściawyjścia PUTCHAR int putchar(int znak); stdio.h Wpisuje znak do strumienia stdout (standardowo ekran) Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wypisany znak Jeśli wystąpił błąd, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 42/66 Znakowe operacje wejścia-wyjściawyjścia FGETC int fgetc(file *stream); stdio.h Pobiera jeden znak ze strumienia wskazywanego przez stream Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca przeczytany znak po przekształceniu go na typ int Jeśli wystąpił błąd lub został przeczytany znacznik końca pliku, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 43/66 Znakowe operacje wejścia-wyjściawyjścia FPUTC int fputc(int znak, FILE *stream); stdio.h Wpisuje znak do otwartego strumienia reprezentowanego przez argument stream Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wypisany znak Jeśli wystąpił błąd, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 44/66 Znakowe operacje wejścia-wyjściawyjścia UNGETC int ungetc(int znak, FILE *stream); stdio.h Umieszcza znak z powrotem w strumieniu wejściowym stream

Rok akademicki 2014/2015, Wykład nr 1 45/66 Przykład: wyświetlenie pliku tekstowego #include <stdio.h> int main(void) { FILE *plik; int znak; plik = fopen("test.txt","r"); while ((znak=getc(plik))!=eof) putc(znak,stdout); fclose(plik); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 46/66 Przykład: wyświetlenie pliku tekstowego Inny sposób czytania znaków z pliku: while ((znak=fgetc(plik))!=eof) Inne sposoby wyświetlania znaków: putchar(znak); fputc(znak,stdout); printf("%c",znak);

Rok akademicki 2014/2015, Wykład nr 1 47/66 Przykład: liczba znaków wczytanych z klawiatury #include <stdio.h> int main(void) { int znak; int ile = 0; Ala ma laptopa Liczba znakow: 14 while ((znak=getchar())!='\n') ile++; printf("liczba znakow: %d\n",ile); } return 0; Wprowadzane znaki są buforowane do naciśnięcia klawisza Enter Po naciśnięciu klawisza Enter zawartość bufora jest przesyłana do programu i analizowana w nim

Rok akademicki 2014/2015, Wykład nr 1 48/66 Przykład: liczba wyrazów w pliku #include <stdio.h> int main(void) { FILE *plik; int znak, odstep = 1, ile = 0; plik = fopen("test.txt","r"); while ((znak = getc(plik))!= EOF) if (znak == ' ' znak == '\t' znak == '\n') odstep++; else if (odstep!= 0) { odstep = 0; ile++; } fclose(plik); printf("liczba slow: %d\n",ile); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 49/66 Łańcuchowe operacje wejścia-wyjściawyjścia GETS char* gets(char *buf); stdio.h Pobiera do bufora pamięci wskazywanego przez argument buf linię znaków ze strumienia stdin (standardowo klawiatura) Wczytywanie jest kończone po napotkaniu znacznika nowej linii '\n', który zastępowany jest znakiem końca łańcucha '\0' Funkcja gets() umożliwia wczytanie łańcucha znaków zawierającego spacje i tabulatory Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wskazanie do łańcucha buf Jeśli wystąpił błąd lub podczas wczytywania został napotkany znacznik końca pliku, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 50/66 Łańcuchowe operacje wejścia-wyjściawyjścia PUTS int puts(const char *buf); stdio.h Wpisuje łańcuch buf do strumienia stdout (standardowo ekran), zastępując znak '\0' znakiem '\n' Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca ostatni wypisany znak Jeśli wystąpił błąd, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 51/66 Łańcuchowe operacje wejścia-wyjściawyjścia FGETS char* fgets(char *buf, int max, FILE *stream); stdio.h Pobiera do bufora pamięci wskazanego przez buf co najwyżej max-1 znaków z otwartego strumienia reprezentowanego przez stream Przerywa czytanie po napotkaniu znacznika końca linii '\n' Po ostatnim przeczytanym znaku wstawia do bufora buf znak '\0' Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca wskazanie do łańcucha buf Jeśli wystąpił błąd lub napotkano znacznik końca pliku, to funkcja zwraca wartość NULL

Rok akademicki 2014/2015, Wykład nr 1 52/66 Łańcuchowe operacje wejścia-wyjściawyjścia FPUTS int fputs(const char *buf, FILE *stream); stdio.h Wpisuje łańcuch buf do strumienia stream, nie dołącza znaku końca wiersza '\n' Jeśli wykonanie zakończyło się poprawnie, to funkcja zwraca ostatni wypisany znak Jeśli wystąpił błąd, to funkcja zwraca wartość EOF

Rok akademicki 2014/2015, Wykład nr 1 53/66 Przykład: wyświetlenie pliku tekstowego #include <stdio.h> int main(void) { FILE *plik; char buf[10]; plik = fopen("test1.cpp","r"); while (fgets(buf,10,plik)!=null) fputs(buf,stdout); fclose(plik); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 54/66 Sformatowane operacje wejścia-wyjściawyjścia SCANF int scanf(const char *format,...); stdio.h Czyta dane ze strumienia stdin (klawiatura) FSCANF int fscanf(file *stream, const char *format,...); stdio.h Czyta dane z otwartego strumienia stream SSCANF int sscanf(char *buf, const char *format,...); stdio.h Czyta dane z bufora pamięci wskazywanego przez buf

Rok akademicki 2014/2015, Wykład nr 1 55/66 Sformatowane operacje wejścia-wyjściawyjścia PRINTF int printf(const char *format,...); stdio.h Wyprowadza dane do strumienia stdout (ekran) FPRINTF int fprintf(file *stream, const char *format,...); stdio.h Wyprowadza dane do otwartego strumienia stream SPRINTF int sprintf(char *buf, const char *format,...); stdio.h Wyprowadza dane do bufora pamięci wskazywanego przez buf

Rok akademicki 2014/2015, Wykład nr 1 56/66 Przykład: zapisanie danych do pliku tekstowego #include <stdio.h> int main(void) { FILE *plik; char imie[10] = "Jan"; char nazw[10] = "Kowalski"; int wiek = 21; float wzrost = 1.78; Imie: Jan Nazwisko: Kowalski Wiek: 21 [lat] Wzrost: 1.78 [m] plik = fopen("dane.txt","w"); fprintf(plik,"imie: %s\n",imie); fprintf(plik,"nazwisko: %s\n",nazw); fprintf(plik,"wiek: %d [lat]\n",wiek); fprintf(plik,"wzrost: %.2f [m]\n",wzrost); fclose(plik); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 57/66 Obsługa błędów wejścia-wyjściawyjścia FEOF int feof(file *stream); stdio.h Sprawdza, czy podczas ostatniej operacji wejścia dotyczącej strumienia stream został osiągnięty koniec pliku Zwraca wartość różną od zera, jeśli podczas ostatniej operacji wejścia został wykryty koniec pliku, w przeciwnym razie zwraca wartość 0 (zero)

Rok akademicki 2014/2015, Wykład nr 1 58/66 Przykład: odczytanie liczb z pliku tekstowego #include <stdio.h> int main(void) { FILE *plik; int x; plik = fopen("liczby.txt","r"); fscanf(plik,"%d",&x); while(!feof(plik)) { printf("%d\n",x); fscanf(plik,"%d",&x); } 3 51 93 10 93 64 63 0 46 24 fclose(plik); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 59/66 Przykład: odczytanie liczb z pliku tekstowego Sposób zapisu liczb w pliku wejściowym nie ma znaczenia dla prawidłowości ich odczytu Liczby powinny być oddzielone od siebie znakami spacji, tabulacji lub znakiem nowego wiersza

Rok akademicki 2014/2015, Wykład nr 1 60/66 Rekordowe (blokowe) operacje wejścia-wyjściawyjścia FWRITE size_t fwrite(const void *p, size_t s, size_t n, FILE *stream); stdio.h Zapisuje n elementów o rozmiarze s bajtów każdy, do pliku wskazywanego przez stream, biorąc dane z obszaru pamięci wskazywanego przez p Zwraca liczbę zapisanych elementów - jeśli jest ona różna od n, to wystąpił błąd zapisu (brak miejsca na dysku lub dysk zabezpieczony przed zapisem)

Rok akademicki 2014/2015, Wykład nr 1 61/66 Przykład: zapisanie danych do pliku binarnego #include <stdio.h> int main(void) { FILE *plik; int x = 10; int tab[5] = {1,2,3,4,5}; float y = 1.2345; plik = fopen("dane.dat","wb"); fwrite(&x,sizeof(int),1,plik); fwrite(tab,sizeof(int),5,plik); fwrite(tab,sizeof(tab),1,plik); fwrite(&y,sizeof(float),1,plik); fclose(plik); } return 0;

Rok akademicki 2014/2015, Wykład nr 1 62/66 Rekordowe (blokowe) operacje wejścia-wyjściawyjścia FREAD size_t fread(void *p, size_t s, size_t n, FILE *stream); stdio.h Pobiera n elementów o rozmiarze s bajtów każdy, z pliku wskazywanego przez stream i umieszcza odczytane dane w obszarze pamięci wskazywanym przez p Zwraca liczbę odczytanych elementów - w przypadku gdy liczba ta jest różna od n, to wystąpił błąd końca strumienia (w pliku było mniej elementów niż podana wartość argumentu n)

Rok akademicki 2014/2015, Wykład nr 1 63/66 Przykład: odczytanie liczb z pliku binarnego #include <stdio.h> int main(void) { FILE *plik; int x, ile = 0; } plik = fopen("liczby.dat","rb"); fread(&x,sizeof(int),1,plik); while (!feof(plik)) { ile++; printf("%d\n",x); fread(&x,sizeof(int),1,plik); } fclose(plik); printf("odczytano: %d liczb\n",ile); return 0; 37 31 83 27 6 62 31 50 Odczytano: 8 liczb

Rok akademicki 2014/2015, Wykład nr 1 64/66 Przykład: odczytanie liczb z pliku binarnego Po otwarciu pliku wskaźnik pozycji pliku pokazuje na jego początek Po odczytaniu jednej liczby: fread(&x,sizeof(int),1,plik); wskaźnik jest automatycznie przesuwany o sizeof(int) bajtów Po odczytaniu kolejnej liczby: fread(&x,sizeof(int),1,plik); wskaźnik jest ponownie przesuwany o sizeof(int) bajtów Plik binarny zawiera liczby: 37 31 83 27 6 62 31 50

Rok akademicki 2014/2015, Wykład nr 1 65/66 Przykład: operacje na pliku tekstowym i binarnym #include <stdio.h> int main(void) { FILE *plik1, *plik2; int x; } plik1 = fopen("liczby.dat","rb"); plik2 = fopen("liczby.txt","w"); fread(&x,sizeof(int),1,plik1); while (!feof(plik1)) { fprintf(plik2,"%d\n",x); fread(&x,sizeof(int),1,plik1); } fclose(plik1); fclose(plik2); return 0;

Rok akademicki 2014/2015, Wykład nr 1 66/66 Koniec wykładu nr 1 Dziękuję za uwagę!