Perl에서 크로스 플랫폼, 원자 파일 교체를하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/392016

문제

나는 매우 일반적인 상황이 있습니다. 파일이 있고 새 내용으로 해당 파일을 완전히 덮어 써야합니다. 그러나 원본 파일은 모든 페이지로드 (웹 앱)에서 액세스하므로 오랫동안 누락 할 수는 없습니다. 몇ms는 괜찮지 만 (이상적이지는 않지만) 두 번째는 괜찮지 않습니다.

지금은 동일한 디렉토리에 임시 파일을 작성한 다음 해당 임시 파일을 새 파일의 이름으로 바꾸어이 작업을 수행합니다. Perl에서 일반 파일 :: temp 및 "이름 바꾸기"를 사용하고 있습니다. 나는 궁금했다-이것을하는 다른 권장/더 좋은 방법이 있습니까? CPAN 모듈이 필요하지 않은 것이 바람직합니다. 이것이 제 시스템 에서이 작업을 수행 해야하는 유일한 장소이므로 완전히 새로운 종속성을 원하지 않습니다.

아, 그리고이 모든 것은 Windows, Linux, BSD, OS X, Solaris 및 대부분의 다른 일반적인 플랫폼에서 작동해야합니다.

다음은 해당 코드입니다, 관심있는 사람들을 위해.

도움이 되었습니까?

해결책

당신의 방법은 괜찮아 보입니다. 빠르고 원자력이며 핵심 모듈 만 사용하며 파일 :: temp는 임시 파일을 처리하는 안전한 방법입니다. 무엇이 더 필요합니까?

다른 팁

나는 당신이하고있는 것과 같은 방식으로 할 것입니다. 최소한 UNIX- 타입 OS에서 파일 이름 바꾸기는 원자력으로 보장되므로 원본이나 새 파일이없는 순간이 없습니다.

이름을 바꾸면 충분합니다. 하지만:

임시 파일은 인종 조건에 위험이 있습니까? 파일 이름은 무작위 배정되어야하므로 아무도 자신의 파일을 삽입하여 문제를 일으킬 수 없습니다. 가능하면 mkstemp ()에 인터페이스를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top