Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
pl.comp.programming
[C, POSIX/SUS] Jak sprawdzic, czy plik juz jest otwarty?
Bogdan (bogdro)
9/7/2007 5:45:00 PM
Witam.
Mam nastepuj?ce zagadnienie: przed wykonaniem jakiejkolwiek czynno?ci
z danym (poprzez ?cie?ke lub deskryptor/FILE*) plikiem nale?y
sprawdzia, czy plik ten nie jest otwarty przez jakikolwiek inny
proces, najlepiej wliczaj?c w to mapowanie do pamieci.
Pytanie brzmi: czy jest jaki? przeno?ny sposób, by to zrobia?
Ewentualnie mo?e bya biblioteka, ale musi ona bya pod jak?? woln?
licencj?. Najlepiej, je?li da3oby sie bez ?adnych bibliotek.
Otwieranie w trybie wy3?czno?ci jest niewystarczaj?ce,
fcntl(,F_SETLEASE,) - skuteczne (choa nie zawsze tak musi bya), ale
nieprzeno?ne.
Jezyk: C (nie C++).
Docelowy system: g3ównie Linux/Unix i podobne, ale im bardziej
przeno?ne, tym lepiej
Nie nale?y zak3adaa posiadania uprawnien administratora oraz
istnienia systemu /proc (fuser, lsof odpadaj?), lecz badane pliki s?
w3asno?ci? u?ytkownika uruchamiaj?cego kod sprawdzaj?cy.
--
Pozdrawiam/Regards - Bogdan (Linux & FreeDOS)
Kurs asemblera x86 (DOS & Linux):
http://rudy.mif.pg.gda....
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
3 Answers
Mariusz Kruk
9/7/2007 9:19:00 PM
0
epsilon$ while read LINE; do echo ">$LINE"; done < Bogdan (bogdro)
> Otwieranie w trybie wy3?czno?ci jest niewystarczaj?ce,
>fcntl(,F_SETLEASE,) - skuteczne (choa nie zawsze tak musi bya), ale
>nieprzeno?ne.
A flock()?
--
\------------------------/ Heavy voodoo here. I can't even believe you
| Kruk@epsilon.eu.org | are reading this. Are you crazy? Don't even
|
http://epsil...
| think about adjusting these[...](squid.conf)
/------------------------\
Bogdan (bogdro)
9/8/2007 7:49:00 AM
0
Mariusz Kruk pisze:
> epsilon$ while read LINE; do echo ">$LINE"; done < Bogdan (bogdro)
>> Otwieranie w trybie wy3?czno?ci jest niewystarczaj?ce,
>> fcntl(,F_SETLEASE,) - skuteczne (choa nie zawsze tak musi bya), ale
>> nieprzeno?ne.
>
> A flock()?
Je?li dobrze rozumiem opis tej funkcji, to gwarantowane jest jedynie
to, ?e LOCK_EX mo?e bya w danej chwili na danym obiekcie ustawione
przez co najwy?ej 1 proces. Wnioskuje z tego, ?e je?li wykonane jest
open() (w trybie niewy3?cznym), po czym ponownie open() z
flock(LOCK_EX), to wszystkie wywo3ania sie powiod? (bo po pierwszym
open() nie ustawiono blokady), a nie o to chodzi3o - flock() mia3oby
sie nie udaa, by proces wiedzia3, ?e plik ju? jest otwarty. Ta funkcja
nie daje takiej mo?liwo?ci.
--
Pozdrawiam/Regards - Bogdan (Linux & FreeDOS)
Kurs asemblera x86 (DOS & Linux):
http://rudy.mif.pg.gda....
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Mariusz Kruk
9/8/2007 9:38:00 AM
0
epsilon$ while read LINE; do echo ">$LINE"; done < Bogdan (bogdro)
>przez co najwy?ej 1 proces. Wnioskuje z tego, ?e je?li wykonane jest
>open() (w trybie niewy3?cznym), po czym ponownie open() z
>flock(LOCK_EX), to wszystkie wywo3ania sie powiod? (bo po pierwszym
>open() nie ustawiono blokady),
Fakt, masz racje. Dopiero po zalockowaniu dalsze operacje nie powiod3yby
sie, ale nie zale?y to od wcze?niejszego otwierania pliku.
--
/\-\/\-\/\-\/\-\/\-\/\-\/\ You rang?(TeX)
\ Kruk@epsilon.eu.org /
/
http://epsil...
\
\/-/\/-/\/-/\/-/\/-/\/-/\/
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
[C, POSIX/SUS] Jak sprawdzic, czy plik juz jest otwarty?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password