Do spisu tresci tematu 6

6.3 Pisanie - funkcja write()



Spis tresci


Objasnienia.

Ponizej przedstawiam znaczenie bitow slowa dostepu do pliku zapisanego w i-wezle na polu mode.

bit setuid - bit nadawania efektywnego identyfikatora uzytkownika (fsuid) dla procesu wykonujacego plik,

bit setgid - to samo dla fsgid,

bit przyklejania - gdy 1, to w pamieci zostaje kopia pliku po jego wykonaniu,

typ pliku (4 bity z lewej, ósemkowo):


Przyda sie jeszcze znajomosc czesci

struktury file:

struct file {

}


Ponizej przedstawiam funkcje (jedna) z wirtualego file-systemu. Oznacza to, ze jest ona niezalezna od file-systemu, ktory sobie zainstalowalismy.

Funkcja write()

Sluzy do pisania do pliku (w tym rowniez gniazda, gdyz gniazdo jest typem pliku).

DEFINICJA: int write(unsigned int fd, char *buf, unsigned int licznik)

WYNIK: liczba zapisanych bajtow lub blad.

DANE: deskryptor pliku (fd), wskaznik do danych do zapisania (buf), ilosc bajtow do zapisania (licznik).

Algorytm pisania:

{

}


Kazdy filesystem ma swoja strukture file_operations, w której okreslone sa charakterystyczne dla niego operacje na plikach:

struct file_operations {

}

Do struktury tej prowadzi wskaznik z kazdego pliku w tablicy plikow.


Po opuszczeniu semafora, w file-systemie Ext2 wykonywana przez jadro jest:

Funkcja ext2_file_write()

DEFINICJA: int ext2_file_write(inode *inode, file *file, char *buf, int licznik)

WYNIK: liczba zapisanych bajtow lub blad.

DANE: plik oraz odpowiadajacy mu i-wezel, buf i licznik - to wskaznik i rozmiar obszaru w pamieci z danymi (te same, co w funkcji write).

Algorytm pisania, c.d. :

{

}



Zrodla informacji

  1. Przede wszystkim pliki zrodlowe Linuxa (tutaj bez moich komentarzy):
  2. Opracowany przeze mnie kod zrodlowy - z komentarzem do prawie kazdej linijki jest tu:

  3. Maurice J.Bach "Budowa systemu operacyjnego UNIX", paragraf 5.3.



Pytania i odpowiedzi

Ogolne pytania pana Raczunasa:

1. Z jakich plikow zrodlowych Linuxa korzystali Panstwo przy opracowywaniu tematu?
Z plikow wymienionych w zrodlach informacji.
2. Jakie struktury danych znalezione w tych plikach uwazaja za najwazniejsze?
Oczywiscie b.wazna jest struktura file i slowo dostepu do pliku.
3. Jakie znalezione w plikach zrodlowych rozwiazanie programistyczne uwazaja Panstwo za najciekawsze?
Pisanie z opoznieniem po 16 blokow w funkcji ext2_file_write.
4. Jakie znalezli (w tej konkretnej wersji Linuxa) ograniczenia na rozne zasoby systemowe?
Liczba otwartych plikow nie moze byc wieksza niz 1024 (NR_FILE) oraz liczba plikow otwartych przez jeden proces nie moze byc wieksza niz 256 (NR_OPEN).

Inne pytania:

5. Czy stale O_NONBLOCK i O_NDELAY maja taka sama wartosc? (odnosnie funkcji open)
Tak.


Autor: Mateusz Hauzer
E-mail: mhauzer@students.mimuw.edu.pl

tego samego autora: funkcja chown.