저는 Java의 Files.walkFileTree를 사용하여 특정 디렉터리의 *.csv 파일을 주기적으로 스캔한 다음 읽습니다.
나는 mv가 원자적이라는 것을 알고 있습니다(적어도 동일한 장치 내에서는). 따라서 "mv" 파일은 경쟁 조건 측면에서 문제가 되지 않아야 합니다.
cp 작업을 수행하면 cp가 먼저 다른 파일 이름으로 복사한 다음 원래 이름에 대해 원자적 mv 작업을 수행합니까? 아니면 읽고 쓰는 것이 직접적으로 경쟁 조건을 유발합니까?
tar & gz를 사용하여 파일을 다른 디렉토리로 추출하는 것과 동일한 문제가 있습니다.
추신. 대답이 운영 체제에 따라 다르다면 저는 CentOS 6에서 작업하고 있습니다. 또한 가능하다면 Windows 답변도 언급해 주실 수 있나요?
답변1
GNU cp
와 GNU tar
(CentOS를 포함한 대부분의 Linux 배포판의 표준 구현)의 경우 파일을 내부에서 생성합니다. 대부분의 다른 구현에서도 마찬가지라고 확신합니다. 그러나 기능적으로 원자적으로 만들기 위해 래퍼 스크립트를 작성하는 것은 그리 어렵지 않습니다. Windows에 대해서는 잘 모르지만 잘 모르겠습니다.생각하다이는 POSIX가 파일 시스템 작업의 원자성에 대해 제공하는 추가 보장을 제공합니다.
mv
이는 파일 시스템 경계를 넘지 않는 경우에만 원자적이라는 점도 주목할 가치가 있습니다. 그렇지 않으면 cp
소스 파일을 실행한 다음 링크를 해제하는 것과 같습니다.