¿Cuál es la mejor manera de hacer un multi-plataforma, el reemplazo de archivos atómica en Perl?

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

Pregunta

Tengo una situación muy común. Tengo un archivo, y necesito para sobrescribir ese archivo por completo con nuevos contenidos. Sin embargo, el archivo original se accede en cada carga de página (se trata de una aplicación web), por lo que no puede faltar por mucho tiempo. Unos pocos ms está bien (aunque no es lo ideal), un segundo no está bien.

En este momento hago esto escribiendo un archivo temporal en el mismo directorio y luego cambiar el nombre que el archivo temporal al nombre del nuevo archivo. Sólo estoy usando el archivo normal :: Temp y "cambio de nombre" a ello, en Perl. Me preguntaba - ¿Hay alguna otra mejor forma recomendada / para hacer esto? Preferiblemente uno que no requiere un módulo CPAN, ya que este es el único lugar en mi sistema que tengo que hacer esto, y no quiero una dependencia completamente nuevo sólo para esto.

Ah, y todo esto tiene que funcionar en Windows, Linux, BSD, OS X, Solaris, y la mayoría de otras plataformas comunes.

Aquí está el código en cuestión , para los interesados.

¿Fue útil?

Solución

Su método parece muy bien. Es rápido, es atómica, que utiliza módulos básicos solamente, y File :: Temp es una manera segura de hacer frente a los archivos temporales. ¿Qué más se puede pedir?

Otros consejos

Yo lo haría de la misma manera que lo haces. Al menos en los sistemas operativos de tipo Unix, un cambio de nombre de archivo se garantiza que sea atómica por lo que no tendrá ningún instantes en que el original o los nuevos archivos no está allí.

Cambiar nombre es suficiente. Sin embargo:

Es el archivo temporal en riesgo de condiciones de carrera? El nombre del archivo debe ser aleatorizados para que nadie pueda causar problemas mediante la inserción de su propio archivo. Utilice una interfaz para mkstemp () si es posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top