"File2가 없으면 File1의 이름을 File2로 바꾸십시오. 그렇지 않으면 오류가 발생합니다"라는 어 플 플랫폼 특정 방법이 있습니까? File2가 존재하는지 여부를 확인한 다음 파일 이름을 변경하지 않으면 파일의 이름을 바꿀 수 있다는 것을 알았지 만 다른 프로세스가 수표와 rename()
사이에 File2를 만들면 잠재적 인 경쟁 조건이 발생합니다.C 플랫폼 간 renameat2() rename-if-not-exists 기능
리눅스에서는 정확히 RENAME_NOREPLACE
플래그가 설정된 renameat2()
기능이 있습니다. 불행하게도 맨 페이지에 의하면
renameat2()는 Linux에만 해당합니다.
모든 libc 구현이이 호출을 지원하는지 또는 glibc 만 지원하는지 알지 못합니다.
내 용도로는 같은 디렉토리에서 이름을 바꾸면 충분하지만 완전히 다른 경로로 이동할 필요는 없습니다.
이 잠재적으로 https://stackoverflow.com/a/230581/5562035 관련되어 Atomically swap contents of two files on Linux
어떤 의미에서 원자입니까? 특히'rename()'과'renameat()'에 대한 리눅스 문서는 "oldpath와 newpath 둘 다 이름이 바뀌는 파일을 가리키는 창이있을 것입니다." –
상식을 사용하십시오. –
대상 파일의 존재 여부와 다른 프로세스가 대상 파일을 만들 수있는 이름 바꾸기 사이에 시간 창이 없어야합니다. 이 조건이 없으면'if (! file_exists (path_2)) {rename (path_1, path_2)}' – buggy3