Witam i zapraszam ponownie.
Jesteśmy w nowej sekcji.
Ta sekcja dotyczy wprowadzania i wyprowadzania plików, pisania i czytania z plików.
Skoncentrujemy się na plikach tekstowych, ale o plikach binarnych też trochę porozmawiamy.
W tym wykładzie chcę tylko przedstawić ogólny zarys, powiedzieć, czym jest plik i powiedzieć, jak jest on dobrze wykorzystywany
do przechowywania trwałych danych.
Tak więc do tego momentu wszystkie dane, do których dostęp ma nasz program, są za pośrednictwem pamięci.
Znamy to pojęcie zmiennych, struktur, cokolwiek to jest.
Wymaż wszystkie dane, których używa Twój program, znajdują się w pamięci.
A powodem, dla którego jest przechowywany w pamięci, jest to, że pamięci są naprawdę szybkie i możesz uzyskać dostęp
do niego szybko, aby wykonać obliczenia.
Robisz cykl pobierania, wykonywania, wszystkie te rzeczy.
Tak więc zakres, ale również jest ograniczony, ponieważ zakres i różnorodność naszych aplikacji, jeśli
wykorzystuje tylko pamięć, będzie nieco ograniczona.
Wiemy, że pamięć odchodzi, gdy program odchodzi, a więc to może być bardzo ograniczające.
Wszystkie poważne aplikacje biznesowe wymagają większej ilości danych niż zmieściłaby się w pamięci głównej.
Pamięć główna też jest bardzo mała, w sam raz do góry.
A obecnie można dostać dużo pamięci, od 1630 do 32 gigabajtów.
Ale w przeszłości, a zwłaszcza na urządzeniach wbudowanych, nie masz tak dużo pamięci RAM, a w rezultacie twoje aplikacje są bardzo
ograniczone ze względu na przestrzeń i rozmiar.
Naprawdę chcesz tylko przechowywać zmienne i takie rzeczy w pamięci głównej.
To również dlatego, że pamięć główna odchodzi, gdy program odchodzi.
Nie możesz mieć żadnych danych, które są przechowywane trwale po ponownym uruchomieniu komputera.
Wszystko więc zależy od możliwości przetwarzania danych, które są trwałe i przechowywane na urządzeniu zewnętrznym,
takim jak dysk twardy te duże programy.
Więc chcesz mieć tę zdolność do przechowywania na dysku twardym.
Jest trochę wolniejszy, ale możesz przechowywać na nim wiele danych, a duże programy muszą przechowywać
wiele danych.
C dostarcza w standardzie plików nagłówkowych wiele funkcji służących do zapisu do i odczytu z urządzeń zewnętrznych.
Nie musisz pisać własnego kodu, aby odczytać i zapisać pliki, ale możesz zobaczyć przewagę,
jaką oferują aplikacje, które mają możliwość przechowywania danych przez dłuższy czas.
Wiele zalet.
Zewnętrznym urządzeniem, którego używałbyś do przechowywania i pobierania danych, jest zazwyczaj
dysk twardy.
Jednak funkcje plików nagłówkowych, o których będziemy mówić, można używać na dowolnym zewnętrznym urządzeniu pamięci masowej.
Więc można go użyć na dysku USB, można go użyć na dowolnym urządzeniu zewnętrznym, które przechowuje dane i dysk SSD wszystko
ze wszystkimi przykładami.
Do tej pory wszelkie dane wprowadzane przez użytkownika były tracone.
Po zakończeniu pracy programu jest to określane jako pamięć lotna.
Kiedykolwiek słyszysz ten termin vol time memory, oznacza to, że pamięć nie jest trwała lub dane
nie są trwałe.
Znika po zakończeniu programu lub po ponownym uruchomieniu maszyny.
Jeśli więc użytkownik chce uruchomić program z tymi samymi danymi, musi za każdym razem wpisywać je na nowo, aby
zostały przywrócone.
Jest to bardzo niewygodne.
To ogranicza programowanie.
I znów jest to pamięć lotna.
Kiedy przechowujesz rzeczy w plikach i składujesz je na dysku twardym, jest to trwałe przechowywanie.
Wciąż tam jest.
Nawet po restarcie maszyny lub gdy Twój program nie jest uruchomiony.
To jest określane jako pamięć nieulotna, ponieważ pozostaje wokół pliku, może przechowywać dane nieulotne i jest zwykle
przechowywany na dysku lub obecnie dysk półprzewodnikowy i SSD.
Jest to nazwana część pamięci masowej, a stadardowy IO to plik zawierający użycie informacji,
aby móc czytać i pisać do tych plików.
Ale będziemy używać tej koncepcji zapisu i odczytu danych z pliku do trwałego przechowywania,
a zauważysz, jak twoje aplikacje stają się znacznie bardziej użyteczne, znacznie bardziej wytrzymałe, znacznie bardziej
skalowalne, ponieważ teraz mamy możliwość przechowywania dużych ilości danych, a także nie musimy się martwić o to, że dane
znikną, gdy program się skończy lub komputer zostanie zrestartowany.
Tak więc korzystanie z plików będzie bardzo, bardzo korzystne.
Plik wewnątrz w systemie operacyjnym Linux lub systemie operacyjnym Windows jest przechowywany w określony sposób.
Ale jeśli chodzi o C, język programowania, to jest to tylko sekwencja bajtów w każdym bajcie może być odczytana
indywidualnie.
Odpowiada to strukturze plików w systemie Unix, ale niekoniecznie.
To dostaje tylko różnicę, gdy czytasz pliki tekstowe i okna, ponieważ możesz
mieć dodatkowe znaki, które musisz martwić się o rozmiar, ale to tylko ciąg bajtów.
Więc jeśli masz plik tekstowy i ma on więcej bajtów, nadal możesz odczytać te bajty.
Trzeba tylko zrozumieć, co te bajty reprezentują.
A więc oto jak wygląda plik i jak będziemy go czytać i pisać do niego używając języka programowania
C.
To po prostu seria bajtów z różnymi przesunięciami.
Początek pliku byłby przez zero, a potem zawsze można znaleźć różne pozycje
w pliku.
Może to być cztery, może to być cztery na dziesięć dwa, może to być 100 bajtów w to.
A potem masz koniec pliku i koniec pliku zwykle oznaczony specjalnym znacznikiem o nazwie
EOF i plik.
Tak więc plik ma początek i koniec oraz aktualną pozycję.
Aktualna pozycja jest określona tyle bajtów na początku.
Bieżąca pozycja to miejsce, w którym będzie miała miejsce jakakolwiek akcja pliku.
Będziesz pisał lub czytał na tej pozycji.
I będziemy również mówić o niektórych funkcjach, w których możesz poruszać się, aby przenieść bieżącą pozycję w dowolnym
miejscu w pliku.
Nawet na końcu, jeśli chcesz czytać na końcu lub do samego końca.
Istnieją dwa rodzaje plików.
Istnieją pliki tekstowe i pliki binarne.
Plik tekstowy to dane zapisane jako ciąg znaków zorganizowanych w postaci linii.
Każda linia kończy się nowym wierszem, a dane tekstowe mogą się różnić w zależności od systemu, w jaki sposób interpretowane
są znaki.
Czyli na przykład w Windows w DOS-ie każda linia ma carriage return i line feed, a więc backslash
R i backslash N.
I tak, gdy czytasz dane lub piszesz dane, musisz to zrozumieć, ponieważ format jest
nieco inny.
Ale w systemie Linux nie masz backslasha.
R I tak musisz zrozumieć, jak dane tekstowe są zapisywane, mimo że są zorganizowane przez linie i są serią bajtów,
dane binarne są zapisywane jako seria bajtów dokładnie tak, jak pojawiają się w pamięci.
Tak więc przykładami plików, które mają dane binarne są dane.
Nasze pliki takie jak dane obrazowe czy pliki binarne kodujące muzykę nie są możliwe do odczytania.
Gdybyś próbował przywołać je w edytorze tekstu, ponieważ są to tylko bajty, w tym rozdziale skupimy
się na plikach tekstowych, ale do pliku możesz zapisać dowolne dane.
Możesz napisać to jako serię bajtów i jak pojawiają się w pamięci, lub możesz napisać jako tekst.
Ale kiedy plik zostanie faktycznie napisany, będzie po prostu składał się z serii bajtów, nawet jeśli
jest reprezentowany jako tekst.
Pliki tekstowe można przeglądać w edytorze, co czyni je bardziej czytelnymi.
Musisz zrozumieć, że format pliku, aby go odczytać i to jest to, o czym
wspomniałem, jeśli działasz na DOS Windows lub Linux, gdzie Windows może mieć dodatkowe znaki, gdy pisze
dane.
Tak więc sekwencja 12 bajtów w pliku binarnym może być 12 znakami, może być 12 ośmioma na osiem bitowych liczb całkowitych
ze znakiem lub 12 niepodpisanych liczb całkowitych.
Ognie binarne są szczególnie podstępne, ponieważ po prostu przechowują Watsona jako pamięć pozorną.
Tak więc w trybie binarnym każdy bit pliku jest dostępny.
Ale aby odczytać coś z pliku, musisz zrozumieć, co tam jest, jeśli chodzi o dane i jak są przechowywane.
I może to zależeć od tego, na jakim systemie działasz.
I będzie to też zależało od tego, czy będzie to tekst, czy binarny.
Strumienie.
Programy typu C są automatycznie otwierane na trzech plikach w Twoim imieniu.
Strumień może reprezentować plik, ale strumień jest bardziej ogólnym terminem, który może reprezentować dowolny rodzaj danych wejściowych.
Więc może reprezentować klawiaturę, może reprezentować konsolę, może reprezentować plik, może reprezentować
gniazdo.
Jeśli jesteś przyzwyczajony do strumieni sieciowych, są one bardziej ogólnym terminem, a istnieją trzy strumienie, które są
otwierane automatycznie dla ciebie w języku programowania C.
Jednym z nich jest standardowe wejście, i jest to normalne urządzenie wejściowe twojego systemu.
Zazwyczaj domyślnie jest to klawiatura.
Używamy standardowego wejścia, gdy robimy scan F, ale możesz użyć scan off do czytania
z plików.
Jeśli zmienisz strumień wejściowy, może zmienisz strumień wejściowy na plik standardowe wyjście to
zwykle wyświetla się na ekranie, zwykle przez konsolę.
Standardowy błąd jest również na ekranie, ale zwykle musisz go przekierować, aby zobaczyć
go za pomocą jak ampersand trzy lub coś takiego.
Ale to są te trzy wyjścia, o których wspomniałem.
Standardowe wejście to plik, który jest czytany przez gitara i scan F Standardowe wyjście jest używane przez output
my i print F głównie używaliśmy printf.
Możesz również przekierować pliki w systemie, aby były rozpoznawane jako standardowe wyjście wejściowe.
To jest przekierowanie.
Jest to koncepcja systemu operacyjnego, w którym można przekierować dane, wysłać wyjście do pliku na przykład lub wysłać
wejście, uzyskać wejście z pliku w przeciwieństwie do standardowego.
To tutaj możesz użyć symboli less than lub greater than.
Celem standardowego wyjścia błędów jest zapewnienie logicznie odrębnego miejsca do wysyłania komunikatów o błędach.
Więc jest to jakby osobne, mimo że wyświetlane na ekranie.
Aby mieć do tego dostęp, trzeba mieć specjalną komendę.
Strumień jest abstrakcyjną reprezentacją dowolnego zewnętrznego źródła lub miejsca docelowego dla danych.
Dlatego jest to bardziej ogólne niż, powiedzmy, plik.
Klawiatura.
Wiersz poleceń na plikach wyświetlanych na dysku.
To wszystko są przykłady tego, jak pracuje się ze strumieniami.
Strumienie będą znacznie ważniejsze, gdy zaczniesz studiować C ++.
Biblioteka C zapewnia funkcje odczytu i zapisu do lub ze strumieni danych, więc możesz użyć tych samych funkcji wejścia-wyjścia
do odczytu i zapisu dowolnego urządzenia zewnętrznego, które jest odwzorowane na strumień.
Dlatego wspomniałem, że możesz użyć skanu F do czytania z klawiatury.
Można też użyć scan F do czytania z plików.
Wszystko zależy od tego, co jest na wejściu, gdzie wskazuje strumień.
I tak funkcje są bardzo, bardzo przydatne i bardzo, bardzo elastyczne, aby to zrobić.
A więc jest to tylko ogólny zarys tego, czym jest plik i dlaczego go używamy, jak to jest być trwałymi
danymi, to jest nieulotna pamięć.
Pozostaje w pobliżu, będziemy go używać i będziemy używać standardowego pliku nagłówkowego IO, aby czytać
i pisać do niego, gdy potrzebujemy przechowywać dane dla naszego programu i nasze programy kończą się dużo bardziej solidne,
dużo bardziej użyteczne, dużo bardziej elastyczne.
Więc w naszym następnym wykładzie porozmawiamy o faktycznym zaimplementowaniu tego przy użyciu funkcji w standardowym
nagłówku IO.
Dziękuję.