Dydaktyka:
Feedback
POSIX:
C:
Deskryptory plików:
Wybrane flagi dla funkcji
Pozycje odniesienia dla
Wyciąg funkcji i stałych z materiałów
Porównanie API
POSIX C I/O C++ streams
identyfikuje plik przez:
deskryptor pliku
int wskaźnik
FILE* specjalizowane klasy
std::ifstream/std::ofstream/std::fstream
otwieranie / tworzenie / zamykanie / usuwanie pliku:
open
creatfopen konstruktor klasy lub metoda
open
close fclose metoda
close
unlink remove std::filesystem::remove
odczyt / zapis / zmiana pozycji:
read fread, fscanf, fgetc, fgets, … operator >>, metody
read, readsome, get, getline, …
write fwrite, fprintf, fputc, fputs, … operator <<, metody
write, put, …
lseek fseek, ftell, fgetpos, fsetpos, … metoda
tellg i seekg
inne:
truncate
ftruncate std::filesystem::resize_file
dup
dup2
standardowe identyfikatory wejścia/wyjścia/błędu:
0, 1 i 2 stdin, stdout i stderr std::cin, std::cout i std::cerr #include'y
fcntl.h (file control)
open, creat
unistd.h pozostałe funkcje interfejsu POSIX z tabeli wyżej
errno.h stała
errno 1)
stdio.h
perror
string.h
strerror Wybrane stałe
Wartość Nazwa stałej
0 STDIN_FILENO
1 STDOUT_FILENO
2 STDERR_FILENO
open:
O_RDONLY, O_RDWR, O_WRONLYO_CREAT lub O_CREAT | O_EXCL (przy ustawieniu tej flagi do funkcji open trzeba przekazać trzeci argument opisujący uprawnienia nowo tworzonego pliku)O_APPENDO_TRUNClseek:
SEEK_SETSEEK_CURSEEK_END
Zadanie 1 Napisz "hello world" dodając jedną linię do poniższego kodu. Użyj funckji z interfejsu POSIX.
#include <unistd.h> int main(){ return 0; }
Zadanie 2
Napisz program który zapyta o imię, następnie wypisze Witaj <imię>.
Do odczytu ze standardowego wejścia użyj funkcji z interfejsu POSIX.
Zadanie 3 Napisz program który dwa razy wykona kolejno:
"no","to","wać\n".Następnie sprawdź działanie kodu w następujące sposoby:
./prog),cat (tzn. ./prog | cat),stdbuf -o0 bash, potem uruchom program normalnie.Wyjaśnij różnice w wynikach.
Zadanie 4 Napisz program który wyświetli na ekranie całą zawartość pliku podanego jako pierwszy argument.
Zadanie 5
Napisz program który spróbuje otworzyć plik którego nazwa została podana jako
pierwszy argument i wyświetli komunikat czy otwarcie (do zapisu i odczytu) się
powiodło. Jeśli otwarcie się nie powiodło, program ma wyświetlać odpowiedni
komunikat. Dodatkowo wybierz i obsłuż trzy z poniższych punktów.
Jeśli otwarcie się nie powiodło:
\e[44m),\e[41m),\e[42m),\e[46m),\e[45m).Do wypisania komunikatu w konkretnym kolorze, wypisz przed nim podane w nawiasach znaki, a za nim
\e[0m.
Przykładowym gniazdem które można użyć do testów jest plik /dev/log.
Zadanie 6 Napisz program który jako argumenty przyjmuje dwie ścieżki do plików i wypisuje na standardowe wyjście czy pliki są identyczne.
Zadanie 7
Napisz program który jako argument przyjmuje ścieżkę do pliku plik.
Program ma stworzyć pliki o nazwach plik_u i plik_l zawierające
treść źródłowego pliku, przy czym w pierwszym wszystkie litery (znaki ASCII
a-z) mają być zmienione na wielkie, a w drugim na małe.
Nagłówek ctype.h udostępnia funkcje toupper i tolower.
Zadanie 8
Napisz program który dla każdego pliku podanego jako argument wypisze wielkość
pliku i ostatnie 16 bajtów z pliku. Użyj funkcji lseek.
Zadanie 9 Napisz w dwóch wersjach program który zmienia małe litery na wielkie w pliku podanym jako argument:
Zadanie 10 Umieść w wybranym pliku przynajmniej 32 bajty tekstu. Następnie stwórz program, który:
Sprawdź jak wygląda treść pliku.
open
flagę O_APPEND i porównaj działanie programu.
Zadanie 11 Napisz program który usunie z pliku wskazanego jako argument wszystko poza pierwszą linią.
Zadanie 12
Napisz program który stworzy plik o stałej nazwie i ustawi jego rozmiar na
4.5036e15 bajtów (czyli ok. 4 petajabty). Następnie program ma wpisać stałe
wybrane ciągi znaków na początek i na koniec pliku.
Uruchom program, następnie podaj rzeczywistą wielkość pliku. Spróbuj wyświetlić
pierwsze 16 bajtów pliku, cały plik (używając np. cat -v) i ostatnie 16
bajtów pliku.
Zadanie 13
Stwórz program który otworzy plik podany jako pierwszy argument programu, a
następnie wykorzystując dup bądź dup2 zastąpi standardowe wyjście tym
plikiem. Potem program ma kolejno wykonać przykładowy write do
STDOUT_FILENO, printf oraz ma wykonać jakąś komendę poleceniem
system (np. system("ls -la")). Które z tekstów trafiły do pliku po
uruchomieniu programu?
Zadanie 14 Stwórz program który otworzy wskazany w argumentach plik, następnie usunie go i spróbuje odczytać zawartość do końca pliku z deskryptora zwróconego przez funkcję open.
errno wchodzą w standard C, większość wartości ustandaryzowanych w POSIX wchodzi też w standard języka C++.