2012-09-04 28 views
7

Chciałbym uzyskać więcej informacji na temat funkcji synchronizacji (8) i funkcji fsync w systemie Linux (2.6.31). Czy upewnia się, że pliki są zapisywane w odpowiednim magazynie?fsync, sync: czy naprawdę robi to, co powinno?

+0

Dlaczego to jest wątpliwość? – Rohan

+0

, ponieważ napotykam problem po zapisaniu na kartę SD. tutaj jest link http://stackoverflow.com/questions/12262044/sd-card-data-sometimes-not-seen-on-pc-when-connected-in-usb-mass-storage-mode-v – shinymetal

Odpowiedz

8

http://linux.die.net/man/8/sync

Nie upewnić się, że pliki są zapisywane do odpowiedniego przechowywania. Dba tylko o to, aby buforowane/zbuforowane dane były przepłukiwane na urządzenie dyskowe. Nie ma znaczenia, czy jest to karta SD, czy cokolwiek innego.

+4

Aby być dokładniej, przepuszcza dane do urządzenia, ale urządzenie zwykle ma własną warstwę pamięci podręcznej, więc może nadal nie być w pamięci trwałej po spłukaniu (tj. może znajdować się w pamięci podręcznej dysku, ale jeszcze nie na talerzu/pamięć flash). Oznacza to, że jeśli wyłączy się zasilanie, nadal możesz utracić dane. –

+3

Aby być jeszcze bardziej precyzyjnym, to zależy. Jeśli masz fs obsługujący bariery i są one włączone, funkcja sync()/fsync() i niektóre inne operacje spowodują wysłanie odpowiednich poleceń CACHE FLUSH (ATA) lub SYNCHRONIZE CACHE (SCSI) do urządzenia; to oczywiście zależy od urządzenia, aby sensownie wykonać te polecenia. – janneb

+0

jeśli dane urządzenie (karta SD/sterownik MMC) zachowuje własną warstwę pamięci podręcznej, gdzie by to było? czy będę w stanie debugować tę warstwę? – shinymetal