2011-10-19 2 views
0

파일에 몇 줄을 쓰고 싶습니다. 필자는 각 줄을 원자 작업으로 작성해야합니다.파일에 행을 쓰는 방법과 각 행은 원자 적 연산입니까?

예를 들어

, 나는 3 개 라인을 가지고 :

111111111111111111111111 
222222222222222222222222 
333333333333333333333333 

내가 파일을 줄 단위로 작성하면 프로그램이 오류로 종료 될 수 있으므로 저장된 데이터가 될 수있다 :

11111111111111111111111 
222222 

이것은 내가 예상 한 것이 아닙니다. 나는 각 행이 트랜잭션, 원자 적 연산이되기를 희망한다.

어떻게해야합니까?


현재 자바를 사용하고 있습니다.

+0

먼저 어떤 언어입니까? 파일을 쓰려면 지금 뭐하고 있니? –

+1

AFAIK I/O 작업은 원자적일 수 없습니다. 그렇지 않으면 시스템이 지옥처럼 느려질 수 있습니다. 다른 스레드/프로세스가 간섭하지 않도록하려면 mutex/semaphores를 사용하십시오. – m0skit0

+0

@Stealth, Java를 사용합니다. – Freewind

답변

4

100 % 신뢰할만한 방법은 없습니다.

출력 스트림에서 flush()을 호출하고 기본 파일 설명자에 sync()을 호출하는 것이 가장 가까운 것으로 생각합니다. 다시 말하지만, 여기에는 도움이되지 않는 고장 모드가 있습니다.

1

@aix가 제안하는대로 플러시/동기화를 사용할 수 있습니다. 그렇지 않으면 (99.999 % 신뢰도가 높을수록) 트랜잭션 지원을 포함하는 일종의 환경 (예 : 데이터베이스)을 사용하고 commit을 사용하는 것이 좋습니다.

2

파일에 새로운 줄을 실제로 쓰는 것이 필요하다면 새로운 이름으로 복사본을 만들고 새 줄을 쓰고 새 파일의 이름을 원래 이름으로 바꾸는 것이 유일한 방법 일 것입니다. 이름 바꾸기 작업은 적어도 POSIX에서는 원자 적입니다. Windows에서 이름을 바꾸기 전에 원본 파일을 제거해야합니다. 그러면 해당 프로세스에서 문제가 발생하면 파일을 복원 할 수 없다는 문제가 있습니다.

관련 문제