리눅스 USB sync 관련 문제...

white-hill의 이미지

리눅스에서 임의의 데이터 80MB 가량을 작성하여
USB 에 fwrite 를 이용하여 붙여 넣었습니다.
그리고 fclose 를 호출하여 파일을 닫았습니다.

fclose 확인 한 뒤 USB 를 뽑아서 다른 PC 에서 확인을 하니...
파일이 손상 되거나 심지어 보이지 않더군요...

구글 검색을 해보니
리눅스는 sync 가 필요하다고 하더군요..
하여

sync();
fclose(FILE*...);

형식으로 바꾸어 주었습니다.

하지만 그래도 시간에 따라 파일이 생성 되고 안되고 하더군요...

fflush 와 sync fsync 차이가 무엇인지요...
검색하여 보니 fflush 는 user 영역 data를 flush 하는 것이고,
sync는 USB disk 에 flush 하는 것으로 알고 있습니다,
맞는 것인지..
하여 sync호출 을 하였습니다.

sync 함수의 완료는 어떻게 하는 건가요?
return 도 없고...

위와 같은 문제 경험 해보시고 해결보신분이나 기타 다른 의견 부탁드립니다. ㅠㅠ

aruee의 이미지

fclose 이후 sync() 불러 주셔야 할것 같은데...

fflush는 f 계열 함수 내에 구현된 버퍼 비우기 이고..
sync는 파일 시스템 캐쉬를 강제로 disk로 보내는걸꺼고..

그래서 fclose 이후 sync...

근데.. USB라면 mount 가 됐을텐데 unmount는 안하시는가요?

white-hill의 이미지

fclose 이후에 sync 를 호출 하여도 결과는 같이 끝쪽 data 가 깨지네요...

그리고 현재 파일을 생성하는 곳은 target board 입니다...
set 상에서 파일이 만들어 진 것만 확인 할 수가 있습니다...
하여 umount 는 user level 단계에서는 할 수가 없습니다...

휴...

open write lseek 로 새로 구현해 봐야겠네요 ㅎㅎㅎ