Index Sandemo Margit Saga O Ludziach Lodu pulnoc (2) Krzywa Sweetmana Psychoterapia kierunki metody badania TEXTPROP (2) ÂŚwiderkówna Rozmów o Biblii ciąg dalszy Kuraszkiewicz Magowie Dodziuk Anna Psychologia podręczna CzęÂść III Pokochać (5) 234 Bettelheim Bruno Cudowne i pożyteczne O znaczeniach i wartoÂściach baÂśni (10) |
[ Pobierz całość w formacie PDF ] .6.4.3 Funkcja systemowa flock ()Do spisu tresci tematu 66.4.3 Funkcja systemowa flock()Spis tresciOpis dzialania blokadOpis funkcji fcntl()Opis funkcji flock()Ustawianie blokady typu FLOCKOpis funkcjiflock()Funkcja flock() udostepnia programiscie dostep do drugiegorodzaju blokady pliku.W Linuxie blokada ta jest umownie nazywana FLOCK(od nazwy funkcji systemowej).Blokady zakladane sa na caly plik, a nie narekord jak w przypadku blokad typu POSIX.Definicja funcji znajduje sie w pliku fs/locks.c i ma postac:int flock(unsigned int fd /* deskryptor pliku */unsigned int cmd /* komenda */);W pliku include/asm/fcntl.h znajduja sie definicje komend:#define LOCK_SH 1 /* blokada dzielona */#define LOCK_EX 2 /* blokada wylaczna */#define LOCK_NB 4 /* nie usypiaj w czasie blokowania */#define LOCK_UN 8 /* usuwanie blokady */Plik nie moze miec jednoczesnie blokad typu dzielonego i wylacznego.Blokadawylaczna moze byc tylko jedna na jednym pliku, a blokad dzielonych moze bycwiecej.Najczesciej blokady dzielonej uzywa sie przy czytaniu a wylacznej przypisaniu do pliku.Funkcja zwraca 0, jesli zakonczyla sie sukcesem lub ujemnawartosc bledu.Implementacja blokad FLOCK jest znacznie prostsza niz w przypadkublokad typu POSIX, gdyz nie trzeba sprawdzac wszystkich blokadzalozonych na plik i znajdowac przeciecia z zakladana, a wystarczy sprawdzicpierwsza zalozona blokade, a wszystkie pozostale beda tego samego typu.A oto wlasciwy algorytm zakladania i zdejmowania blokad FLOCK:Algorytm flock_lock_file z pliku fs/locks.cwejscie: flip strutura file pliku, na ktory zakladamy blokadecaller struktura zawierajaca dane o zakladanej blokadziewait czy dozwolone jest usypianie procesuwyjscie: o jesli sukces lub kod bleduif (zalozona blokada typu POSIX)return (-EBUSY);wez pierwsza blokade na plik;while (sa jeszcze blokady zalozone)if (zalozona blokada nalezy do tego samego deskryptora){if (zalozona blokada tego samego typu)return(0);zaznacz,ze zmieniamy typ zalozonej blokady;wyjdz z petli while;}if (zmiana typu blokady)usun zalozona blokade;if (polecenie usuniecia blokady)return (0);etykieta repeat:wez pierwsza blokade zalozona na plik;if (blokada POSIX)return (-EBUSY);while (sa jeszcze blokady){if (zakladana blokada wywoluje konflikt z zalozona){if (!wait)return (-EAGAIN);wstaw blokade na koncu kolejki spiacych na danej blokadzie;uspij proces na konfliktowej blokadzie;/* tu juz jestesmy obudzeni */ubudz inne procesy czekajace na tej samej blokadzie;goto repeat}}wstaw nowa blokade na kolejke blokad;return (0);Nalezy pamietac o tym, ze blokady typu FLOCK sa zwiazane zdeskryptorami plikow (ang.flick), czyli blokada jest dziedziczona wraz zdeskryptorami po wywolaniu funkcji fork() [ Pobierz całość w formacie PDF ] |
||||
Wszelkie Prawa Zastrzeżone! Kawa była słaba i bez smaku. Nie miała treści, a jedynie formę. Design by SZABLONY.maniak.pl. | |||||