2012-03-06 3 views
0

는 어떻게 될까 간은 boost::interprocess::file_lock()를 보유하고?:: 내 처리 프로세스를 종료하지 않고 동안</strong><code>std::ios::trunc</code> 플래그를 사용하여 데이터를 가진 <code>fstream</code>을 다시 <strong>경우

OS에서 파일 잠금을 유지해야합니까? 아니면 파일이 닫힐 때 OS가 잠금을 투명하게 등록 해제합니까? Windows와 POSIX 환경 모두 만족할 것입니다.

편집

내 주요 목표는 설정 파일을 절단하고 다시 작성하는 것입니다. 파일의 2w 목적은 다른 동등한 디먼이 시작되지 못하게하는 것입니다. 그래서 부스트 또는 C++ stl을 사용하여 파일을 닫지 않고 자르면 다른 방법이 있습니다. D

+0

는 어디 선가 뭔가를 오해하지 않는 한 ... –

+0

내가 현대 POSIX/WINAPI 구현을 사용하고 가정 할 수 있습니다, 단지 실패 할 경우 다시 당신, 모든 파일 잠금을 지원 (지난 10 ~ 20 년에서 무언가 말?) –

+0

IIRC POSIX는 파일 잠금을하지 않습니다. 리눅스는 이것을 비표준 확장으로 지원한다고 생각합니다. 대부분의 BSD가 전혀 지원하지 않는다고 생각합니다. 나는 틀릴 수 있었다. –

답변

0

경험적으로 : std::fstream::close 다음에 을 사용하여 파일을 다시 열면 잠금이 투명하게 삭제됩니다 linux 명령 lsof)을 실행 한 후 boost::interprocess을 사용하여 잠금을 다시 획득해야합니다.

따라서, 열린 파일 다음에 acquire-lock을 따르는 한 괜찮을 것입니다.

동일한 테스트를 Windows에서 실행할 수도 있습니다. 당신의 OS를 가정