🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#1228
Author: Marek Matula
Date: Tue, 14 Apr 1998 17:28
21 lines
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
#1229
Author: Piotr Piatkowski
Date: Tue, 14 Apr 1998 18:03
19 lines
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