파일을 새로 만들고 저장하면, 내 하드 디스크에 바로 그 즉시 저장될까? 정답은 아니다. 실제로 우리가 새로 만든 파일은 우선 메모리 버퍼에 저장되며 운영체제(커널)가 판단하여 일정 시간이 지난 뒤 하드 디스크에 저장한다. 파일을 복사 또는 저장 후 컴퓨터 전원을 바로 끊어버리는 경우, 혹은 용량이 아주 큰 파일을 USB로 복사하고 추출 버튼을 누르지 않은 채 곧바로 USB를 빼는 경우, 파일이 깨지거나 복사가 되지 않을 수 있다. 아직 버퍼에 남아 있는 상태에서 물리적으로 연결을 끊으면 저장이 되지 않는다.
만약 파일 생성 및 복사 후 하드 디스크에 곧바로 저장하고 싶다면 fsync() 함수 또는 sync() 함수를 사용하면 된다.
1. fsync()
변경 파일(data와 metadata)을 하드 디스크에 저장되도록 요청하며, data와 metadat가 저장이 될 때까지 기다린다.
QFile f(filePath);
QString contents = "test";
if( !f.open(QIODevice::WriteOnly | QIODevice::Truncate) ){
return false;
}
if( f.write(contents.toUitf() ) > -1 ){
//SUCCESS
f.flush();
fsync( f.handle() );
}
f.close();
2. sync()
현재 버퍼에 있는 모든 파일들을 디스크에 저장하도록 요청한다. 요청만 할 뿐, 실제 저장 완료될 때까지 기다리진 않는다. 따라서 자주 사용하게 되면 시스템 성능에 영향을 미칠 수 있다. 꼭 필요한 상황에서만 사용하는 것이 좋다.
QFile f(filePath);
QString contents = "test";
if( !f.open( QIODevice::WriteOnly | QIODevice::Truncate) ){
return false;
}
if( f.write(contents.toUitf()) > -1 ){
//SUCCESS
}
f.close();
sync();
'Programming > C++' 카테고리의 다른 글
bash shell 스크립트 정규식 url 날짜 정보 추출 url 파일 다운 받기 (0) | 2022.11.19 |
---|---|
linux diff 명령어 no such file or directory 해결 방법 (0) | 2022.03.05 |
정규식 IP주소만 추출하는 방법 in Qt5 (0) | 2021.11.06 |
swp 파일 삭제해도 괜찮을까? 생성되는 이유(in Linux) (0) | 2021.10.31 |
removeRecursively 한글 파일 삭제 실패 해결방법(Qt5) (0) | 2021.10.23 |
댓글