이 관련 질문정확한 문제를 해결할 수 없어 비슷한 질문을 작성하고 있습니다.
내 시나리오는 다음과 같습니다. 프로그램(와인으로 실행)이 약 10-500KB 크기의 파일을 작성합니다. 각 쓰기 이벤트마다 약 1KB의 추가가 발생합니다(행은 파일 끝에 추가되며 다른 쓰기 방법은 없음). 쓰기 간격은 마이크로초에서 240분까지입니다. (일반적으로 쓰기 간격은 3~10분 정도이지만, 위의 시간 경계는 이론적으로 가능한 한계입니다.)
이 간격은 수정할 수 없으며 사용자 관점에서 볼 때 무작위입니다. 쓰기 간격이 바뀌므로 가능합니다ABCD쓰기 이벤트는 다음과 같습니다. AB 60분, BC 5초, CD 357.4초 등.
외부 편집을 위해 약 25~30분마다 파일을 복사하고 싶습니다(물론 자동으로).
최선의 해결책은 무엇입니까보장하다경쟁 조건이 발생하지 않습니까? 타이밍 알고리즘을 작성하고 싶지는 않지만 필요하다면 작성할 수 있습니다. 또한 외부 편집으로 복사 간격을 1일까지 확장할 수 있으며 그 이상은 확장할 수 없습니다. Wine에서는 출력을 리디렉션할 수 없습니다.
$ grep sda4 /etc/mtab
/dev/sda4 /foo xfs rw,relatime,attr2,delaylog,noquota 0 0
고쳐 쓰다
저는 작성 과정에 협조할 수 없으며 문제의 파일은 엄격한 형식의 일반 텍스트 파일입니다.
답변1
다음 중 하나를 제외하고 모든 경우에 "부분 쓰기"(애플리케이션의 관점에서)를 복사하지 않는다는 보장은 없습니다.
- 다른 프로세스와 협력합니다(즉, 쓰기를 플러시하고 중지/다시 시작하도록 지시).
- 일관된 스냅샷/백업/덤프를 생성할 수 있는 "실제" 트랜잭션(데이터베이스) 시스템을 사용합니다.
문제의 파일이 엄격한 형식인 경우 이 문제가 해결될 수 있는 경우도 있습니다. 비원자적 쓰기가 진행되는 동안 파일을 복사하면 마지막 레코드가 일관성이 없거나 불완전해지며 처리 애플리케이션에서 이를 감지하거나 시스템적으로 마지막 레코드를 무시할 수 있습니다.
(애플리케이션이 항상 write
단일 호출 또는 동등한 방법을 통해 레코드를 쓰는 경우에도 쓰기 호출 중에 애플리케이션이 중단될 수 있으며 쓰기의 일부만 실제로 처리됩니다.)