Si el código ejecutado en un archivo debe bloquearse o no, es una decisión de diseño y MS simplemente decidió bloquearlo, porque tiene claras ventajas en la práctica: de esa manera, no es necesario saber qué código en qué versión utiliza qué aplicación. Este es un problema importante con el comportamiento predeterminado de Linux, que la mayoría de la gente simplemente ignora. Si se reemplazan las bibliotecas de todo el sistema, no puede saber fácilmente qué aplicaciones usan el código de dichas bibliotecas, la mayoría de las veces lo mejor que puede obtener es que el administrador de paquetes conoce a algunos usuarios de esas bibliotecas y las reinicia. Pero eso solo funciona para cosas generales y bien conocidas como tal vez Postgres y sus bibliotecas o tal. Los escenarios más interesantes son si desarrolla su propia aplicación contra algunas bibliotecas de terceros y esas son reemplazadas, porque la mayoría de las veces el administrador de paquetes simplemente no conoce su aplicación. Y eso' No es solo un problema de código C nativo o algo así, puede suceder con casi todo: simplemente use httpd con mod_perl y algunas bibliotecas de Perl instaladas usando un administrador de paquetes y deje que el administrador de paquetes actualice esas bibliotecas de Perl por cualquier motivo. No reiniciará su httpd, simplemente porque no conoce las dependencias. Hay muchos ejemplos como este, simplemente porque cualquier archivo puede potencialmente contener código en uso en la memoria por cualquier tiempo de ejecución, piense en Java, Python y todas esas cosas.
Así que hay una buena razón para tener la opinión de que bloquear archivos de forma predeterminada puede ser una buena opción. Sin embargo, no es necesario que esté de acuerdo con esas razones.
Entonces, ¿qué hizo la EM? Simplemente crearon una API que le da a la aplicación que llama la oportunidad de decidir si los archivos deben bloquearse o no, pero decidieron que el valor predeterminado de esta API es proporcionar un bloqueo exclusivo a la primera aplicación que llama. Eche un vistazo a la API sobre CreateFile y su dwShareMode
argumento. Esa es la razón por la que es posible que no pueda eliminar los archivos en uso por alguna aplicación, simplemente no le importa su caso de uso, usó los valores predeterminados y, por lo tanto, obtuvo un bloqueo exclusivo de Windows para un archivo.
Por favor, no crea en la gente que le dice algo sobre Windows que no usa el recuento de referencias en HANDLEs o que no es compatible con Hardlinks o algo así, eso es completamente incorrecto. Casi todas las API que utilizan HANDLE documentan su comportamiento con respecto al recuento de referencias y puede leer fácilmente en casi cualquier artículo sobre NTFS que, de hecho, es compatible con Hardlinks y siempre lo hizo. Desde Windows Vista, también tiene soporte para Symlinks y el Soporte para Hardlinks se ha mejorado al proporcionar API para leer todos los de un archivo determinado, etc.
Además, es posible que simplemente desee echar un vistazo a las estructuras utilizadas para describir un archivo en, por ejemplo, Ext4 en comparación con las de NTFS , que tienen mucho en común. Ambos trabajan con el concepto de extensión, que separa los datos de los atributos como el nombre del archivo, y los inodos son prácticamente otro nombre para un concepto anterior, pero similar. Incluso Wikipedia enumera ambos sistemas de archivos en su artículo .
Realmente hay mucho FUD en torno al bloqueo de archivos en Windows en comparación con otros sistemas operativos en la red, al igual que en la desfragmentación. Parte de este FUD se puede descartar simplemente leyendo un poco en Wikipedia .