C Operacje na plikach

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

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

Programowanie w językach wysokiego poziomu

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

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

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

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

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

7 Przygotował: mgr inż. Maciej Lasota

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

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

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

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

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Biblioteka standardowa - operacje wejścia/wyjścia

12. OPERACJE NA PLIKACH

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

Program 14. #include <iostream> #include <ctime> using namespace std;

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

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

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

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 INP001210WL rok akademicki 2018/19 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

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

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

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

Argumenty wywołania programu, operacje na plikach

Podstawy programowania w języku C++

Pliki wykład 2. Dorota Pylak

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

Zasady programowania Dokumentacja

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

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

Podstawy programowania w języku C++

Podstawy Programowania.

Programowanie Procedurale. Pliki w języku C++

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

Struktury. Przykład W8_1

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

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

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

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

VII. Ciągi znaków łańcuchy

1 Podstawy c++ w pigułce.

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

lekcja 8a Gry komputerowe MasterMind

Programowanie w językach

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

Pliki wykład 2. Dorota Pylak

I. Podstawy języka C powtórka

Zmienne i struktury dynamiczne

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Ćwiczenie nr 8. Temat: Operacje na plikach - zapis i odczyt danych.

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

Pliki. Operacje na plikach w Pascalu

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Kier. MTR Programowanie w MATLABie Laboratorium

Podstawy programowania w języku C++

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

Podstawy programowania w języku C++

Podstawy Programowania

Pytania sprawdzające wiedzę z programowania C++

Podstawy Programowania Podstawowa składnia języka C++

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

Temat: Operacje na plikach. Pliki tekstowe i binarne. Faza otwarcia, zapisu/odczytu i zamknicia pliku.

System operacyjny Linux

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

- wszystkie elementy - wszystkie elementy

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

PLIKI. Składnia deklaracji zmiennej plikowej: file of <typ>

II. Programowanie wsadowe DOS/Windows

Instrukcja automatycznego tworzenia pozycji towarowych SAD na podstawie danych wczytywanych z plików zewnętrznych (XLS).

Programowanie Proceduralne

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

Instrukcja uŝytkownika

2 Przygotował: mgr inż. Maciej Lasota

Podstawy i języki programowania

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

Wprowadzenie do programowania i programowanie obiektowe

Język C zajęcia nr 5

Metody Metody, parametry, zwracanie wartości

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Instrukcja Instalacji

VBA ZAJĘCIA NR 7! praca z plikami (kontynuacja zajęć 6)

tablica: dane_liczbowe

POP 3.1. Czyli krótka historyjka w obrazkach jak poprawnie zainstalować i korzystać z programu POP

Ćwiczenie 1. Wprowadzenie do programu Octave

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

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

Transkrypt:

C - 7 - Operacje na plikach 7.1 Odczyt z pliku ŚcieŜkę do pliku normalnie zapisalibyśmy jako c:\mojepliki\dane\pliczek.txt. Ale znak \ ma specjalne znaczenie w języku C, naleŝy więc zapisać: char *nazwapliku ="c:\\mojepliki\\dane\\pliczek.txt"; JeŜeli jednak wprowadzasz nazwę pliku z klawiatury, to zawsze podawaj pojedyńcze ukośniki!!! Komputer sam zamieni je na podwójne. Utwórz na dysku C katalog mojedane, w tym katalogu utwórz plik dane.txt i zapisz do niego w dwóch linijkach: Co komu do tego, skoro i tak mniejsza o to? Następnie napisz program: JeŜeli ścieŝka do pliku jest wpisana na sztywno, to zawsze dajemy dwa ukośniki!!! JeŜeli podajemy ścieŝkę do pliku z klawiatury, to podajemy jeden ukośnik. FILE, to typ plikowy. Typ, czyli coś takiego jak int, char, JeŜeli otwarcie pliku nie powiodło się... char *nazwapliku = "c:\\mojedane\\dane.txt"; char znaczek; fopen otwiera plik. Funkcja ta pobiera dwa parametry plik = fopen(nazwapliku,"r"); ścieŝkę dostępu oraz specyfikator. return 1; Wychodzimy z funkcji main i zgłaszamy błąd. Elegancja nakazuje zamknąć plik. while(!feof(plik) ){ znaczek = fgetc(plik); printf("%c",znaczek); eof to skrót od End of File. fgetc pobiera jeden znaczek, po czym wskaźnik plikowy sam przesuwa się dalej. Mamy następujące specyfikatory dostępu do pliku: r otwarcie pliku tylko do odczytu, jeŝeli plik nie istnieje, to fopen zwraca NULL. w otwarcie pliku do zapisu. JeŜeli plik nie istnieje, to zostaje stworzony. JeŜeli juŝ istnieje, to zostaje wykasowany, a na jego miejsce tworzony jest nowy pusty plik. a otwarcie pliku do zapisu, nowa treść będzie doklejona na końcu pliku. JeŜeli plik nie istnieje, to zostaje stworzony. r+ otwarcie pliku do zapisu i do odczytu. JeŜeli plik nie istnieje, to zostaje stworzony. JeŜeli istnieje, to nowe dane zostaną zapisane na początku pliku, nadpisując stare dane. w+ - otwarcie pliku do zapisu i do odczytu. JeŜeli plik nie istnieje, to zostaje stworzony. JeŜeli juŝ istnieje, to zostaje wykasowany, a na jego miejsce tworzony jest nowy pusty plik. a+ otwarcie pliku do odczytu i zapisu. Nowe dane zostaną dopisane na końcu pliku. Zadanie 0. Sprawdź, Ŝe w pętli while wystarczy wpisać printf("%c",fgetc(plik)); Zadanie 1. Wypisz tylko co drugą literę z pliku, zawartość pętli while moŝe zawierać tylko dwie linijki. Zadanie 2. Przerób powyŝszy program niech uŝytkownik podaje nazwę pliku (całą ścieŝkę) z klawiatury. Zadanie 3. Przerób powyŝszy program niech uŝytkownik podaje nazwę pliku w linii poleceń (o parametrach z linii poleceń było przy okazji tablic). JeŜeli nie podano parametru z linii poleceń, wypisz komunikat o błędzie. Teraz w pliku dane.txt wpisz tylko liczby zmiennoprzecinkowe, kaŝdą w osobnej linijce. Np: 2.3-32.4 123.4 5444.2 123.2 4343.2 PoniŜszy kod wczytuje do tablicy liczby z pliku, korzystając z osobnej funkcji:

int wczytajliczby(char *nazwapliku,double *tablica,int MAX){ FILE *plik = fopen(nazwapliku,"r"); int licznik=0; while(! feof(plik)){ fscanf(plik,"%lf",tablica++); if(++licznik==max) break; return licznik; double tab[20]; int ileliczb = wczytajliczby("c:\\mojedane\\dane.txt",&tab[0],20); Przekazujemy ścieŝkę do pliku, wskaźnik do pierwszego elementu tablicy oraz maksymalną liczbę elementów. Zwracamy liczbę wczytanych liczb. Tu pobieramy ze zmiennej plikowej plik liczbę typu double, czyli %lf i od razu przesuwamy się na kolejne miejsce w tablicy. MoŜnaby napisać: fscanf(plik,"%lf",tablica); tablica ++; Ale to zajęłoby aŝ dwie linijki :) Zwiększamy licznik liczb o jeden za pomocą ++ i sprawdzamy, czy osiągnęliśmy juŝ maksymalną liczbę liczb. MoŜnaby napisać: licznik++; if(licznik==max) break; Ale to znowu zajęłoby dwie linijki. if(ileliczb > 0){ printf("podales liczby:\n"); for(int i=0;i<ileliczb;i++) printf("%lf\n",tab[i]); Zadanie 4. Napisz program, który pobiera z pliku co najwyŝej 20 liczb, a następnie sortuje je malejąco i znajduje średnią i medianę. PoniŜszy przykład wczytuje z pliku dwa rodzaje danych oddzielonych spacją napisy i liczby: int wczytajliczby(char *nazwapliku,double *odleglosci,char planety[20][20],int MAX){ FILE *plik = fopen(nazwapliku,"r"); int licznik=0; while(! feof(plik)){ fscanf(plik,"%s %lf",*(planety++),odleglosci++); if(++licznik==max) break; return licznik; double odl[20]; char pl[20][20]; int iledanych = wczytajliczby("c:\\mojedane\\dane.txt",&odl[0],pl,20); if(iledanych > 0){ printf("planeta i odleglosc od slonca:\n"); for(int i=0;i<iledanych;i++) printf("%s\t%.2lf\n",*(pl+i),odl[i]); Oddzielamy tabulacją, Ŝeby ładniej wyrównać w pionie.

Zadanie 5. Napisz program, który pobiera z pliku dane w trzech formatach: napis, liczba zmiennoprzecinkowa i liczba całkowita, np: marka samochodu, pojemność silnika i maksymalna prędkość. Dane te powinny być zapisane do trzech tablic. Napisz trzy funkcje, które będą sortować dane uŝytkownik powinien wskazać, po czym ma się odbywać to sortowanie. Czwarta funkcja moŝe wyświetlać dane w jakimś eleganckim formacie, np. w tabelce. Do wczytywania całych linijek z pliku słuŝy funkcja fgets. JeŜeli poniŝszy program nie działa, to znaczy Ŝe pewnie zapomniałeś stworzyć plik z danymi jest to najczęstszy błąd. int rozmiar; char wyraz[256]; plik=fopen("c:\\pliczek.txt","r"); if (plik==null) return 1; fseek(plik,0,seek_end); rozmiar = ftell (plik); printf("plik zawiera %d bajtow\n\n",rozmiar); rewind(plik); int linijki=0; while ( fgets(wyraz, 256, plik)!= NULL){ linijki++; printf("%s",wyraz); printf("\n\nplik zawiera %d linijek.\n\n", linijki); Funkcja fseek przesuwa wskaźnik pliku. Jest wywoływana przed funkcją ftell, Ŝeby ta mogła zwrócić rozmiar pliku. Sprawdź, Ŝe po zakomentowaniu linijki z fseek funkcja ftell nie zwróci poprawnie rozmiaru pliku. Funkcja rewind przewija plik do początku. Sprawdź, Ŝe po zakomentowaniu tej linijki zawartość pliku nie zostanie wypisana. Funkcja fgets pobiera: 1) zmienną, do której naleŝy wpisać tekst 2) liczbę bajtów do przeczytania (jeŝeli w pliku będzie \n, to czytanie się skończy) 3) wskaźnik do pliku Dwa ostatnie parametry funkcji fseek oznaczają, Ŝe naleŝy przesunąć wskaźnik pliku o zero bajtów od końca pliku (SEEK_END) oznacza to, Ŝe wskaźnik ma się znaleźć na końcu pliku. Oprócz SEEK_END mamy teŝ SEEK_SET (początek pliku) oraz SEEK_CUR (bieŝąca pozycja). Zadanie 6. Utwórz plik z duŝą (więcej niŝ 2) liczbą linijek. Wczytaj wszystkie linijki - te nieparzyste poprzedź tabulacją podczas wyświetlania na ekranie. 7.2 Zapis do pliku Przykład zapisu do pliku efektów nie będzie widać na ekranie, lecz w pliku. Po zakończeniu działania programu sprawdź, czy na dysku C utworzono plik i zapisano do niego dane. int tab[20]; tab[0] = 1; tab[1] = 1; for(int i=2;i<20;i++) tab[i] = tab[i-1]+tab[i-2]; plik=fopen("c:\\fibonacci.txt","w"); if (plik==null) return 1; fprintf(plik,"pierwsze 20 liczb Fibonacciego:\n"); for(i=0;i<20;i++) fprintf(plik,"%d\n",tab[i]); Funkcja fprintf pobiera: 1) wskaźnik do pliku 2) zawartość identyczną jak w funkcji printf printf("zapisano dane.\n");

JeŜeli program zapisuje coś do pliku, to studenci prawie zawsze są przekonani, Ŝe program nie działa, poniewaŝ efektów nie widać na ekranie. Trzeba im ciągle powtarzać, Ŝeby sprawdzili plik :( Zadanie 7. W programie robiącym cokolwiek ponownie otwórz plik fibonacci.txt do zapisu i zapisz w nim coś. ZauwaŜ, Ŝe poprzednie dane zostały nadpisane. W jeszcze kolejnym programie otwórz ten sam plik, ale z opcją a, sprawdź, Ŝe dane zostaną dopisane na końcu pliku. Zadanie 8. Sprawdź, co się stanie, jeŝeli ze ścieŝki pliku w funkcji fopen wykasujesz fragment c:\\. Wskazówka: plik znajdzie się gdzieś w katalogu z Twoim projektem. Studenci często podają tylko nazwę pliku (bez ścieŝki) i oczekują, Ŝe komputer domyśli się, Ŝe plik miał być np. na dysku D. Potem są oburzeni, Ŝe pliku tam nie ma :P Zadanie 9. Utwórz plik macierz.txt z macierzą 3x3. Otwórz go do odczytu i zapisu na końcu pliku (jaka będzie opcja otwarcia pliku?). Oblicz wyznacznik macierzy i dopisz go w pliku za macierzą nie kasując Ŝadnych danych. Zadanie 10. Poczytaj w internecie o funkcjach fread i fwrite. Napisz program ilustrujący ich działanie. 7.3 Inne operacje na plikach/katalogach if ( remove("c:\\fibonacci.txt") == 0) printf("usuniecie pliku powiodlo sie\n"); else printf("blad usuniecia pliku\n"); Do usunięcia pliku słuŝy funkcja remove naleŝy z niej korzystać bardzo ostroŝnie. Zadanie 11. Sprawdź, co się stanie przy próbie usunięcia pliku, który nie istnieje. if ( rename("c:\\fibonacci.txt","c:\\lucas.txt") == 0) printf("przenazwowanie pliku powiodlo sie\n"); else printf("blad przenazwowania pliku\n"); Aby zmienić nazwę pliku, skorzystamy z funkcji rename. Utwórz plik fibonacci.txt na dysku C i wpisz do niego cokolwiek. Następnie wykonaj przykładowy program. Zadanie 12. Sprawdź, co się stanie przy próbie przenazwowania pliku, który nie istnieje. Zadanie 13. Napisz program, w którym uŝytkownik poda z klawiatury starą i nową nazwę pliku. Zadanie 14*. Napisz program, w którym uŝytkownik poda nazwę istniejącego pliku oraz nowego pliku. Program ma przekopiować zawartość ze starego do nowego pliku. śeby było bardziej elegancko, napisz osobną funkcję, która będzie przyjmować dwa parametry (ścieŝki do plików) i kopiować jeden plik do drugiego. Visual C++ umoŝliwia teŝ działanie na katalogach: #include "direct.h" if ( _mkdir("c:\\moj_wlasny_katalog") == 0){ printf("utworzylem katalog\n"); if ( _mkdir("c:\\moj_wlasny_katalog\\moj_podkatalog") == 0) printf("utworzylem podkatalog\n"); else printf("nie utworzylem podkatalogu - moze on juz istnieje?\n"); else printf("nie utworzylem katalogu - moze on juz istnieje?\n"); printf("\n\nteraz jestes na dysku %c \n",_getdrive() + 'A' -1); char gdziejestes[256]; _getcwd(gdziejestes, 256); printf ("... a dokladniej mowiac, w katalogu:\n %s\n", gdziejestes); printf("\nsprawdze jakie masz dyski (oprocz stacji dyskietek):\n"); for(int i='c'-'a'+1;i<'z'-'a'+1;i++){ if (_chdrive(i) == 0) printf ("Masz dysk %c\n",_getdrive()+'a'-1); Funkcja _mkdir tworzy katalog. W razie sukcesu zwraca zero. Sprawdź, czy da się od razu utworzyć katalog c:\\moj_wlasny_katalog\\moj_podkatalog zamiast tworzyć go stopniowo. Funkcja _getdrive zwraca numer dysku, na którym działamy w danej chwili. Dla dysku A będzie to 1, dla B 2, dla C 3, itd... Trzeba więc przerobić ten numerek na literkę podczas wyświetlania. Funkcja _getcwd zwraca bieŝący katalog. Pobiera zmienną tekstową, do której zapisze ścieŝkę katalogu oraz długość tej zmiennej tekstowej. Funkcja _chdrive zmienia bieŝący dysk na inny (pobiera jego numer). W razie powodzenia zwraca zero.

printf("\nteraz zmienie biezacy katalog i utworze tam plik\n"); if(_chdir("c:\\moj_wlasny_katalog\\moj_podkatalog")==0){ FILE *plik = fopen("aqq.txt","w"); fprintf(plik,"a kuku!!!"); Funkcja _chdir zmienia bieŝący katalog na inny. W razie powodzenia zwraca zero. Po wykonaniu tego przykładu sprawdź, czy na dysku c w katalogu c:\moj_wlasny_katalog\moj_podkatalog\ znajduje się plik aqq.txt z odpowiednią treścią. Zadanie 15. Napisz program, który usunie katalogi stworzone w powyŝszym programie za pomocą funkcji _rmdir sprawdź, czy da się usunąć katalog i podkatalog od razu, czy teŝ trzeba to robić stopniowo. Korzystaj z funkcji _rmdir z ostroŝnością nie usuń np. całej zawartości dysku C. Zadanie 16. Napisz własną funkcję czyistniejedysk, która pobiera zmienną typu char i zwraca wartość typu bool. Funkcja ma orzekać, czy na komputerze istnieje dysk reprezentowany przez podaną literkę. Wewnątrz tej funkcji naleŝy skorzystać z funkcji _chdrive. 7.4 Najczęstsze błędy Podawanie pojedyńczych ukośników w ścieŝkach plików podawanych "na sztywno". Podawanie podwójnych ukośników w ścieŝkach plików podawanych z klawiatury. Najczęstszy błąd: zapominanie o stworzeniu pliku z danymi oraz podawanie tylko nazwy pliku, bez pełnej ścieŝki. Brak obsługi błędów plikowych (np. nieistniejący plik). Niezamykanie plików za pomocą fclose. Oczekiwanie, Ŝe zapis do pliku będzie zawsze widoczny na ekranie. NieostroŜne korzystanie z funkcji usuwających pliki i katalogi. 7.5 Quiz 1. Jakiej opcji otwarcia pliku uŝyjesz, jeŝeli: a) chcesz otworzyć plik do odczytu i do zapisu, ale w taki sposób, by nie utracić danych w pliku? b) chcesz otworzyć plik do odczytu i do zapisu, ale w taki sposób, by wykasować stare dane? 2. Wypełnij tabelkę: funkcja fgets fprintf feof ftell liczba pobieranych parametrów co one oznaczają? zwracana wartość co oznacza? 3. W jakiej bibliotece znajdują się funkcje operujące na katalogach?. h Wymień trzy funkcje zaczynające się od znaczka _ i napisz, co one robią: