SystemyOperacyjne2—laboratorium MateuszHołenko …

27
Obsluga plików Systemy Operacyjne 2 — laboratorium Mateusz Holenko 25 września 2011

Transcript of SystemyOperacyjne2—laboratorium MateuszHołenko …

Page 1: SystemyOperacyjne2—laboratorium MateuszHołenko …

Obsługa plikówSystemy Operacyjne 2 — laboratorium

Mateusz Hołenko

25 września 2011

Page 2: SystemyOperacyjne2—laboratorium MateuszHołenko …

Plan zajęć

1 Pliki w systemie Linuxi-węzłydeskryptory plików

2 Operacje na plikachotwieranie i zamykaniezapis i odczytskanowanie i skracanietworzenie i usuwanie

3 Operacje na deskryptorach4 Zadania

Mateusz Hołenko Obsługa plików [1/15]

Page 3: SystemyOperacyjne2—laboratorium MateuszHołenko …

Pliki w systemie Linux

Page 4: SystemyOperacyjne2—laboratorium MateuszHołenko …

I-węzły (ang. I-nodes)

plik — podstawowa forma przechowywania danych wkomputerzedla systemu operacyjnego plik jest ciągiem bajtówprzechowywanych najczęściej w pamięci nieulotnej

i-węzeł struktura systemu plików w tradycyjnych Linux’achzawierająca metainformacje o pliku, m.in.:

właściciel pliku, prawa dostęputyp pliku, czasy dostępuilość dowiązań, rozmiar plikuwskaźnik na fizyczną lokalizację pliku na dysku

i-węzeł nie zawiera nazwy pliku ani ścieżki do niego !

Mateusz Hołenko Obsługa plików [3/15]

Page 5: SystemyOperacyjne2—laboratorium MateuszHołenko …

I-węzły (ang. I-nodes)

plik — podstawowa forma przechowywania danych wkomputerzedla systemu operacyjnego plik jest ciągiem bajtówprzechowywanych najczęściej w pamięci nieulotnej

i-węzeł struktura systemu plików w tradycyjnych Linux’achzawierająca metainformacje o pliku, m.in.:

właściciel pliku, prawa dostęputyp pliku, czasy dostępuilość dowiązań, rozmiar plikuwskaźnik na fizyczną lokalizację pliku na dysku

i-węzeł nie zawiera nazwy pliku ani ścieżki do niego !

Mateusz Hołenko Obsługa plików [3/15]

Page 6: SystemyOperacyjne2—laboratorium MateuszHołenko …

I-węzły (ang. I-nodes)

plik — podstawowa forma przechowywania danych wkomputerzedla systemu operacyjnego plik jest ciągiem bajtówprzechowywanych najczęściej w pamięci nieulotnej

i-węzeł struktura systemu plików w tradycyjnych Linux’achzawierająca metainformacje o pliku, m.in.:

właściciel pliku, prawa dostęputyp pliku, czasy dostępuilość dowiązań, rozmiar plikuwskaźnik na fizyczną lokalizację pliku na dysku

i-węzeł nie zawiera nazwy pliku ani ścieżki do niego !

Mateusz Hołenko Obsługa plików [3/15]

Page 7: SystemyOperacyjne2—laboratorium MateuszHołenko …

Deskryptory plików

system plików przechowuje informacje o plikach w globalnejtablicy i-węzłów

użytkownik odwołuje się do plików przez nazwy, systemuoperacyjny przez indeks i-węzła w globalnej tablicy(identyfikator i-węzła, deskryptor pliku)

każdy proces posiada lokalną tablicę i-węzłów (tablicędeskryptorów plików) zawierającą pliki skojarzone z procesem

tablica jest niedostępna bezpośrednio dla programistyodwołuje się do niej przez wywołania funkcji systemowychdomyślnie tablica zawiera trzy wpisy

0 stdin standardowe wejście1 stdout standardowe wyjście2 stderr standardowe wyjście diagnostyczne

Mateusz Hołenko Obsługa plików [4/15]

Page 8: SystemyOperacyjne2—laboratorium MateuszHołenko …

Deskryptory plików

system plików przechowuje informacje o plikach w globalnejtablicy i-węzłów

użytkownik odwołuje się do plików przez nazwy, systemuoperacyjny przez indeks i-węzła w globalnej tablicy(identyfikator i-węzła, deskryptor pliku)

każdy proces posiada lokalną tablicę i-węzłów (tablicędeskryptorów plików) zawierającą pliki skojarzone z procesem

tablica jest niedostępna bezpośrednio dla programistyodwołuje się do niej przez wywołania funkcji systemowychdomyślnie tablica zawiera trzy wpisy

0 stdin standardowe wejście1 stdout standardowe wyjście2 stderr standardowe wyjście diagnostyczne

Mateusz Hołenko Obsługa plików [4/15]

Page 9: SystemyOperacyjne2—laboratorium MateuszHołenko …

Deskryptory plików

system plików przechowuje informacje o plikach w globalnejtablicy i-węzłów

użytkownik odwołuje się do plików przez nazwy, systemuoperacyjny przez indeks i-węzła w globalnej tablicy(identyfikator i-węzła, deskryptor pliku)

każdy proces posiada lokalną tablicę i-węzłów (tablicędeskryptorów plików) zawierającą pliki skojarzone z procesem

tablica jest niedostępna bezpośrednio dla programistyodwołuje się do niej przez wywołania funkcji systemowychdomyślnie tablica zawiera trzy wpisy

0 stdin standardowe wejście1 stdout standardowe wyjście2 stderr standardowe wyjście diagnostyczne

Mateusz Hołenko Obsługa plików [4/15]

Page 10: SystemyOperacyjne2—laboratorium MateuszHołenko …

Operacje na plikachi deskryptorach

Page 11: SystemyOperacyjne2—laboratorium MateuszHołenko …

Otwieranie i zamykanie plików

otwieranie plikówpathname — nazwa pliku (wraz ze ścieżką)flags — flagi otwarcia pliku, m.in.: O_WRONLY,O_RDONLY, O_RDWR, O_APPEND, O_CREAT, O_TRUNCmode — prawa dostępu tworzonego pliku�

int open(const char* pathname, int flags)int open(const char* pathname, int flags, mode_t mode)�� �

zamykanie plikufd — deskryptor zamykanego pliku�

int close(int fd)�� �Mateusz Hołenko Obsługa plików [6/15]

Page 12: SystemyOperacyjne2—laboratorium MateuszHołenko …

Otwieranie i zamykanie plików

otwieranie plikówpathname — nazwa pliku (wraz ze ścieżką)flags — flagi otwarcia pliku, m.in.: O_WRONLY,O_RDONLY, O_RDWR, O_APPEND, O_CREAT, O_TRUNCmode — prawa dostępu tworzonego pliku�

int open(const char* pathname, int flags)int open(const char* pathname, int flags, mode_t mode)�� �

zamykanie plikufd — deskryptor zamykanego pliku�

int close(int fd)�� �Mateusz Hołenko Obsługa plików [6/15]

Page 13: SystemyOperacyjne2—laboratorium MateuszHołenko …

Otwieranie i zamykanie plików — przykładowy program�1#include <fcntl.h>2#include <stdio.h>3#include <unistd.h>4#include <errno.h>5int main(int argc, char* argv[])6{7int fd;8if (argc != 2)9{10printf("Usage: fexist [filepath]\n");11return 1;12}13fd = open(argv[1], O_RDONLY);14if (fd == -1)15{16printf("Couldn’t open file %s (error code %d)\n", argv[1], errno);17perror("Opening file");18return 2;19}20else21{22printf("File %s opened successfully!\n", argv[1]);23if (close(fd) == -1)24{25printf("Couldn’t close file %s (error code %d)\n", argv[1], errno);26perror("Closing file");27}28}29return 0;30}�� �

Mateusz Hołenko Obsługa plików [7/15]

Page 14: SystemyOperacyjne2—laboratorium MateuszHołenko …

Odczyt i zapis danych

odczyt danych z plikówfd — deskryptor pliku (uzyskany z funkcji open)buf — adres początku obszaru pamięci, w którymzostaną umieszczone odczytane danecount — liczba bajtów do odczytu�

ssize_t read(int fd, void* buf, size_t count)�� �zapis danych do pliku

fd — deskryptor pliku (uzyskany z funkcji open)buf — adres początku obszaru pamięci, zawierającegoblok danych do zapisaniacount — liczba bajtów do zapisania�

ssize_t write(int fd, const void* buf, size_t count)�� �Mateusz Hołenko Obsługa plików [8/15]

Page 15: SystemyOperacyjne2—laboratorium MateuszHołenko …

Odczyt i zapis danych

odczyt danych z plikówfd — deskryptor pliku (uzyskany z funkcji open)buf — adres początku obszaru pamięci, w którymzostaną umieszczone odczytane danecount — liczba bajtów do odczytu�

ssize_t read(int fd, void* buf, size_t count)�� �zapis danych do pliku

fd — deskryptor pliku (uzyskany z funkcji open)buf — adres początku obszaru pamięci, zawierającegoblok danych do zapisaniacount — liczba bajtów do zapisania�

ssize_t write(int fd, const void* buf, size_t count)�� �Mateusz Hołenko Obsługa plików [8/15]

Page 16: SystemyOperacyjne2—laboratorium MateuszHołenko …

Odczyt i zapis danych — przykładowy program

�1...23char buf[20];4int n;56while ((n = read(fd, buf, 20)) > 0)7{8write(1, buf, n);9}1011...�� �

Mateusz Hołenko Obsługa plików [9/15]

Page 17: SystemyOperacyjne2—laboratorium MateuszHołenko …

Przesuwanie wskaźnika bieżącej pozycji i skracanie

przesuwanie wskaźnikafd — deskryptor pliku (uzyskany z funkcji open)offset — wielkość przesunięciacount — odniesienie: SEEK_SET, SEEK_CUR, SEEK_END�

off_t lseek(int fd, off_t offset, int whence)�� �skracanie pliku

path — nazwa pliku (wraz ze ścieżką)fd — deskryptor pliku (uzyskany z funkcji open)length — docelowa długość pliku�

int truncate(const char* path, off_t length)int ftruncate(int fd, off_t length)�� �

Mateusz Hołenko Obsługa plików [10/15]

Page 18: SystemyOperacyjne2—laboratorium MateuszHołenko …

Przesuwanie wskaźnika bieżącej pozycji i skracanie

przesuwanie wskaźnikafd — deskryptor pliku (uzyskany z funkcji open)offset — wielkość przesunięciacount — odniesienie: SEEK_SET, SEEK_CUR, SEEK_END�

off_t lseek(int fd, off_t offset, int whence)�� �skracanie pliku

path — nazwa pliku (wraz ze ścieżką)fd — deskryptor pliku (uzyskany z funkcji open)length — docelowa długość pliku�

int truncate(const char* path, off_t length)int ftruncate(int fd, off_t length)�� �

Mateusz Hołenko Obsługa plików [10/15]

Page 19: SystemyOperacyjne2—laboratorium MateuszHołenko …

Tworzenie i usuwanie plików

tworzenie plikupathname — nazwa pliku (wraz ze ścieżką)mode — prawa dostępu tworzonego pliku�

int creat(const char* pathname, mode_t mode)�� �usuwanie pliku

pathname — nazwa pliku (wraz ze ścieżką)�int unlink(const char* pathname)�� �

Mateusz Hołenko Obsługa plików [11/15]

Page 20: SystemyOperacyjne2—laboratorium MateuszHołenko …

Tworzenie i usuwanie plików

tworzenie plikupathname — nazwa pliku (wraz ze ścieżką)mode — prawa dostępu tworzonego pliku�

int creat(const char* pathname, mode_t mode)�� �usuwanie pliku

pathname — nazwa pliku (wraz ze ścieżką)�int unlink(const char* pathname)�� �

Mateusz Hołenko Obsługa plików [11/15]

Page 21: SystemyOperacyjne2—laboratorium MateuszHołenko …

Operacje na deskryptorach

tworzenie duplikatu deskryptoraoldfd — deskryptor do powielenianewfd — numer nowo przydzielanego deskryptora�

int dup(int oldfd)int dup2(int oldfd, int newfd)�� �

Mateusz Hołenko Obsługa plików [12/15]

Page 22: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Page 23: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Zadanie 1Napisz program kopiujący zawartość pliku o nazwie podanej jakopierwszy parametr do pliku, którego nazwa podana jest jako drugiparametr.

Zadanie 2Napisz program zmieniający kolejność znaków w każdej linii pliku onazwie podanej jako parametr.

Zadanie 3Napisz program wyszukujący najdłuższą linię w pliku i podającyilość znaków w tej linii.

Mateusz Hołenko Obsługa plików [14/15]

Page 24: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Zadanie 1Napisz program kopiujący zawartość pliku o nazwie podanej jakopierwszy parametr do pliku, którego nazwa podana jest jako drugiparametr.

Zadanie 2Napisz program zmieniający kolejność znaków w każdej linii pliku onazwie podanej jako parametr.

Zadanie 3Napisz program wyszukujący najdłuższą linię w pliku i podającyilość znaków w tej linii.

Mateusz Hołenko Obsługa plików [14/15]

Page 25: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Zadanie 1Napisz program kopiujący zawartość pliku o nazwie podanej jakopierwszy parametr do pliku, którego nazwa podana jest jako drugiparametr.

Zadanie 2Napisz program zmieniający kolejność znaków w każdej linii pliku onazwie podanej jako parametr.

Zadanie 3Napisz program wyszukujący najdłuższą linię w pliku i podającyilość znaków w tej linii.

Mateusz Hołenko Obsługa plików [14/15]

Page 26: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Zadanie 4Napisz program określający rozmiar pliku/kilku plików o nazwachpodanych jako parametry wejściowy.

Zadanie 5Napisz program wypisujący od końca zawartość pliku (1) znakami,(2) liniami.

Mateusz Hołenko Obsługa plików [15/15]

Page 27: SystemyOperacyjne2—laboratorium MateuszHołenko …

Zadania

Zadanie 4Napisz program określający rozmiar pliku/kilku plików o nazwachpodanych jako parametry wejściowy.

Zadanie 5Napisz program wypisujący od końca zawartość pliku (1) znakami,(2) liniami.

Mateusz Hołenko Obsługa plików [15/15]