`cp --no-clobber`는 경쟁 조건에 취약합니까?

`cp --no-clobber`는 경쟁 조건에 취약합니까?

매뉴얼 페이지cp(1)설명하다

--no-clobber기존 파일을 덮어쓰지 마세요

그런데 아래와 같은 상황이 가능할까요?

  1. cp파일이 이미 존재하지 않는다고 가정하고 파일이 존재하는지 확인합니다.
  2. 다른 프로세스가 동일한 경로에 쓰기 때문에 이전에는 존재하지 않았던 파일에 데이터가 기록됩니다.
  3. cp현재 파일이 존재하는지 모르기 때문에 데이터를 덮어씁니다.

cp --no-clobber이 경쟁 조건에 취약합니까? 그렇지 않다면 cp위의 상황을 피하는 방법은 무엇입니까?

답변1

cp그러한 경쟁 조건에 취약하지 않습니다. 설정되면 --no-clobber대상이 이미 존재하는지 확인하고, 존재하지 않아 계속 복사해야 한다고 판단하면 새 파일에 복사해야 한다는 것을 기억합니다. 대상 파일을 열어야 할 때,생성을 강제하는 플래그로 엽니다.,O_CREAT그리고O_EXCL;그런 다음 운영 체제는 파일이 존재하지 않는지 확인합니다.그것을 열 때EEXIST, 성공하면 실패합니다( ).

관련 정보