Thread View: pl.comp.lang.perl
2 messages
2 total messages
Started by Marek Matula
Tue, 14 Apr 1998 17:28
Jak zablokowac dostep do pliku
Author: Marek Matula
Date: Tue, 14 Apr 1998 17:28
Date: Tue, 14 Apr 1998 17:28
21 lines
1469 bytes
1469 bytes
Jest taki problem: Mam skrypt w Perlu (CGI) ktore po wywolaniu z odpowiednimi parametrami musi zmienic zawartosc paru plikow (zmienic, nie tylko dopisac na koniec). Jak sie zabezpieczyc przed utrata danych w momencie, gdy np. dwoch uzytkownikow w tym samym czasie wywola skrypt? Pewnie byloby potrzebne cos w rodzaju semafora. Byc moze wystarczy tez instrukcja 'flock'. Robil moze ktos cos takiego? Na razie problem rozwiazalem dosc "czolgowo": na poczatku skryptu tworze katalog (pelniacy role semafora), a na koncu kasuje go. Gdy drugi skrypt zostanie wywolany w czasie trwania pierwszego - katalogu nie uda sie stworzyc, i skrypt "wie", ze musi chwile zaczekac. Rozwiazanie to ma taka wade, ze katalog, w ktorym sa pliki musi miec prawa zapisu (zeby dalo sie tworzyc katalog) - a to mi sie nie podoba. Wie ktos, jak to zrobic lepiej? (mile widziany fragment programu). -- Marek Matula marekm@zeus.polsl.gliwice.pl http://www.polsl.gliwice.pl/~marekm ICQ UIN: 3888637
Re: Jak zablokowac dostep do pliku
Author: Piotr Piatkowski
Date: Tue, 14 Apr 1998 18:03
Date: Tue, 14 Apr 1998 18:03
19 lines
1723 bytes
1723 bytes
Marek Matula <marekm@zeus.polsl.gliwice.pl> wrote: : Na razie problem rozwiazalem dosc "czolgowo": na poczatku skryptu : tworze katalog (pelniacy role semafora), a na koncu kasuje go. Gdy : drugi skrypt zostanie wywolany w czasie trwania pierwszego - katalogu : nie uda sie stworzyc, i skrypt "wie", ze musi chwile zaczekac. : Rozwiazanie to ma taka wade, ze katalog, w ktorym sa pliki musi miec : prawa zapisu (zeby dalo sie tworzyc katalog) - a to mi sie nie podoba. Wydaje mi się że to całkiem dobry kierunek, z tym że wystarczy tworzyć plik a nie katalog, i umieszczać go w /tmp/ - wtedy znika problem praw dostępu. Oczywiście powinieneś wymyśleć jakąś możliwie oryginalną nazwę, żeby nie było konfliktu z innymi programami. Żeby próba utworzenia pliku który już istnieje powodowała błąd, użyj funkcji sysopen( F, "/tmp/.moj_program.lock", 0600, O_EXCL|O_CREAT ) Nie zapomnij o use Fcntl na początku (żeby zdefiniować flagi O_xxx) -- Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads