Ha jól értettem a ext4-es problémát, akkor a fájlrendszer fejlesztője szerint illene fsync-et vagy fdatasync-et hívogatni fájlok írása után a felhasználói programokban.
PHP-ben pl. nincs f*sync és (az strace szerint) nem is hív ilyesmit mondjuk lezárásnál. Perl-hez lehet fsync-et varázsolni egy CPAN-os modul segítségével, de alapesetben ott sincs ilyen függvény, és ez sem sync-el mondjuk close után. Egy bash-ben kiadott
echo x >filepath
után max. egy sync parancsot adhatok ki, ami azért elég durva.
Ezek szerint szkriptnyelvekben majdnem esélytelen a biztonságos fájlkezelés?
- 1418 megtekintés
Hozzászólások
perl-hez van POSIX modul, abban van fsync (POSIX modul base perl resze). IO::Handle (szinten base modul) szinten tamogatja fsyncet.
Szoval a perl rendben. fdatasync() nincs hozza alapbol, de szvsz perlben az ember nem ir olyan programot, ahol az jol johetne.
- A hozzászóláshoz be kell jelentkezni
Igaz, ez elkerülte a figyelmemet.
- A hozzászóláshoz be kell jelentkezni
jol latod, shellben csak sync van. de shellben ne is szokas teljesitmeny-kritikus dolgot irni. ha annyira fontos a sebesseg, hasznalj mas nyelvet.
- A hozzászóláshoz be kell jelentkezni
De pl. shellből előszeretettel piszkálunk* konfigurációs fájlokat. Azokkal mi lesz?
Vagy nemrég dolgoztam egy PHP alkalmazáson, ami vadul hoz létre új adatfájlokat, illetve módosít konfigurációt. A ha akarnám se tudnám posix-kompatibilisre megírni, mivel nincs f*sync.
*legalábbis én szoktam.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Nálam csak sync van (CentOS).
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy azért, mert ez FreeBSD manlap? :)
- A hozzászóláshoz be kell jelentkezni
Igen, valószínűleg :) De hogy-hogy ott van, emitt nincs?
- A hozzászóláshoz be kell jelentkezni