Jason. Cała informatyka w jednym miejscu!

Mamy 1 kwietnia! Nieuchronnie zbliża się pewna chwila a właściwie dwie, które dotyczą mojej osoby. Pierwsza z nich będzie pojutrze, zatem spodziewajcie się wtedy wyjątkowo szerokiego artykułu. Przechodząc do tematu właściwego, chciałem napisać o pewnej bardzo ciekawej funkcji umożliwiającej wyświetlanie zawartości pliku w programie, a także możliwość zapisywania wprowadzonej treści do nowego pliku oraz skopiowania zawartości do innego pliku. I to wszystko za pomocą prostego kodu! Co prawda, to nie jest optymalne rozwiązanie, natomiast jest dużo prostsze i można je opanować w ciągu kilku godzin. O ile korzystamy z języka C, mamy szansę wykonać tak zwane "przekierowanie strumienia".

PRZEKIEROWANIE STRUMIENIA. KRÓTKA CHARAKTERYSTYKA

Nadszedł czas, abym sprostował Wasze myślenie na temat wyświetlania i wprowadzania danych. Jeżeli korzystacie z funkcji wypisujących tekst, to nie jest on wypisywany na ekranie komputera, tylko jest przesyłany do strumienia wyjściowego. Gdy podajecie jakieś wartości, czy to liczbowe, czy to znakowe i zatwierdzacie klawiszem Enter, to nie przesyłacie ich do programu, tylko do strumienia wejściowego. Na ten temat przedstawiam niniejszy artykuł.

Oba strumienie należą do standardowych "kanałów" (jest jeszcze strumień błędów, ale to tego nie dotyczy). Strumień wejściowy ma skrót "stdin". Strumień wyjściowy to "stdout". To one są odpowiedzialne za przesyłanie danych i wyświetlanie pewnych wniosków komputera. Korzenie tych strumieni sięgają czasów powstawania systemu "Unix" (1969). Język C również je obsługuje, a jakże. Właśnie dzięki niemu można zobaczyć jak wygląda przekierowanie strumienia w praktyce. Potrzebny nam będzie krótki kod źródłowy, kompilator, wiersz poleceń oraz podstawowa wiedza na temat przekierowywania.

PRZYKŁAD KODU ŹRÓDŁOWEGO

Na sam początek, rozwiążmy sprawę z kodem. Skopiujcie sobie poniższą treść, a następnie wklejcie do nowego pliku z rozszerzeniem ".c".

#include <stdio.h>

int main(void)
{
	int c;
	
	while ((c = getchar()) != EOF)
	{
		putchar(c);
	}
	
	return 0;
}

Następnie, aby wykonać przekierowanie strumienia, wystarczy go sobie skompilować np. przy pomocy "GCC" i po przejściu do wiersza poleceń wpisać:

gcc -o [nazwa pliku wykonywalnego].exe [nazwa pliku kodu źródłowego].c

Po skompilowaniu, możecie uruchomić program podając samą nazwę pliku wykonywalnego jednak będzie to domyślne zachowanie programu polegające na wyświetleniu każdego znaku zatwierdzonego klawiszem Enter (w C, obowiązuje tzw. "wejście buforowane", czyli wszystkie znaki są "trzymane" w buforze dopóki program nie natrafi na znak nowej linii). Przy pomocy kombinacji "Ctrl+Z" wywołujecie "EOF", czyli znak końca pliku.

Natomiast spróbujcie utworzyć sobie nowy plik tekstowy w tym samym katalogu gdzie jest ".exe" i wpisać w nim dowolny tekst. Podając polecenie:

[nazwa pliku wykonywalnego] < [nazwa pliku tekstowego].txt

wykonujecie przekierowanie strumienia wyjściowego, czyli zostanie wyświetlona zawartość pliku. Jest jeszcze ciekawiej jeśli dacie strzałkę w drugą stronę, zaczniecie wprowadzać tekst i wciśniecie "Ctrl+Z" (zróbcie to w nowym wierszu) kończąc Enterem. Wówczas wszystko to co wpisaliście, zostanie osadzone w pliku tekstowym. Ostrzegam, że jeśli chcecie dopisać nową treść, to musicie dać dwie strzałki w prawo bez spacji!

PODWÓJNE PRZEKIEROWANIE STRUMIENIA

Możecie również połączyć jedno z drugim i w ten sposób skopiować zawartość jednego pliku i przenieść do nowego pliku. Podwójne przekierowanie wygląda na przykład tak:

[nazwa pliku wykonywalnego] > [nazwa nowego pliku tekstowego].txt < [nazwa istniejącego pliku tekstowego].txt

Tym sposobem zyskujecie darmowe narzędzie kopiujące pliki tekstowe.


Na koniec, jedno pytanie: czy te zapisy nie kojarzą się Wam z czymś istniejącym w C++? Przecież "cin" i "cout" zapisuje się takimi samymi strzałkami, tylko dwoma! Zwracam na to szczególną uwagę, bo teraz już wiecie skąd się wziął ten zapis i że nikt go sobie nie wymyślił przez przypadek.

PODOBNE ARTYKUŁY