[ Nikolavlasotince @ 28.12.2011. 02:59 ] @
Zdravo,

Interesuje me da li postoji neki nacin da se zakljuca fajl preko C-a za druge procese, dok je pokrenut program (recimo)?

Mislio sam da fopen("ime_fajla", "w") lock-uje fajl tako da ostali procesi ne mogu da pisu nista u njemu, ali sam napravio jedan program koji koristi isti fajl (dok je prethodni koji je takodje otvorio trenutni fajl pokrenut) i pise u njemu neki text, nakon zatvaranja oba programa (prvo ovaj sto pise text), text se nalazi u fajlu.

Da li postoji neki nacin da se zabrani pisanje u fajlu za druge procese?

Googlao sam i navodno postoje neke funkcije oblika flockfile, flock i slicno (koje rade samo na linux-u, nisam siguran da rade mada tvrde ljudi :) ), ali mene interesuje da li postoji nesto slicno za "sve" OS-ove (tj. vise OS-a) ili uopste samo za windows?

Da li je moguce nekako otvoriti fajl ekskluzivno?

P. S. Ako je neko radio nesto slicno i na linux-u dobro bi mi doslo i to za pocetak.

Pozdrav
[ karas @ 28.12.2011. 21:57 ] @
ANSI C ne poznaje termin zakljucavanja fajla vec moras da koristis API operativnog sistema koji koristis. Windows to radi preko CreateFile() dok Unixi koriste fcntl(), flock(), lockf() - upravo funkcije koje si nasao.
[ itf @ 29.12.2011. 09:56 ] @
Zar ne bi najjednostajvniji fopen zaključao datoteku tj. dao je toj aplikaciji na ekskluzivno korištenje?
[ Mihajlo Cvetanović @ 29.12.2011. 10:14 ] @
Sad sam pogledao kod. U Visual Studiu 2008 kad pozoveš fopen i sa F11 uđeš u funkciju vidi se da zapravo iz _tfopen pozivaš _tfsopen sa opcijom _SH_DENYNO. Ova opcija nikome ne brani otvaranje istog fajla. Ako u VS želiš zaključavanje onda pozovi _tfsopen sa opcijom _SH_SECURE.
[ Mihajlo Cvetanović @ 29.12.2011. 10:33 ] @
Hm, ovo gore je iz helpa za Visual Studio 6, a u novijim verzijama više ne spominju _SH_SECURE, ali je opcija _SH_DENYWR i dalje prisutna. Pored _fsopen tu je i kombinacija _sopen_s/_fdopen/flose koja je kao primer data u helpu za _fdopen. U tom primeru zameni (_O_RDONLY, _SH_DENYNO) sa nečim što tebi odgovara, ponajpre _SH_DENYWR umesto _SH_DENYNO.
[ karas @ 29.12.2011. 21:30 ] @
Koja je prednost koristiti _open funkcije umesto CreatFile() koja je deo winapi-ja?
[ Mihajlo Cvetanović @ 30.12.2011. 09:14 ] @
Kad je funkcija deo standarda onda postoji i na Linuxu, i na Windowsu, i bilo gde drugde. Isti kod će se kompajlirati (bez većih problema) na bilo kom operativnom sistemu.
[ karas @ 30.12.2011. 15:47 ] @
Zar u Visual C++-u funkcije koje imaju podcrtu na pocetku nisu MS ekstenzije? Ne vidim da postoje istoimene na Linuksu. Zato i mislim da ne postoji prenosivo resenje u standardnom C-u za zakljucavanje fajlova.