temporales sistema sierra ocupa mucho mac limpiar liberar high espacio eliminar chrome capitan cache borrar archivos c macos purge

sistema - borrar la memoria caché del búfer en Mac OS X



limpiar cache mac sierra (5)

Puede usar sync(2) varias veces (como en la conocida sync; sync; sync idiomática sync; sync; sync ). Parece que no puedo encontrar el código fuente de purge , pero puede ser parte de los paquetes man disponibles en el código 10.5.6

¿Hay alguna manera de borrar programáticamente el caché del búfer en la Mac, preferiblemente en C?

Básicamente, estoy buscando el equivalente de la fuente del comando de purge de 10.5 (y mayor). EDITAR: ahora veo que esto es parte de las herramientas de CHUD, por lo que parece que la fuente no está disponible directamente. Sin embargo, todavía estoy buscando algún código para hacer lo mismo.


Cuando no tiene el código fuente de la herramienta que desea emular (como es el caso aquí), hay varias maneras de hacerlo.

1 / Desde su código C, simplemente llame a la herramienta con una llamada a la función system() . Esto funciona bien siempre que no haya un efecto visible (como abrir una ventana gráfica). Puede usar el system("/path/to/purge -purgargs >/dev/null 2>&1"); , por ejemplo.

2 / Realice una ingeniería inversa del código para ver cómo lo está haciendo realmente. Esto es un poco más complicado ya que requerirá conocimiento del lenguaje ensamblador, llamadas al sistema y muchas otras cosas.

3 / Póngase en contacto con los desarrolladores para obtener consejos sobre cómo se hizo. Esto no tiene por qué ser una pregunta "envíame el código para poder estafarlo y ganar dinero". Podría decirlo como "Tengo interés en utilizar Purge para el desarrollo pero no estoy seguro de qué es exactamente" o "Tengo problemas de seguridad con la ejecución del código, los poderes no me permitirán ejecutarlo a menos que sepamos exactamente lo que hace ". Luego codifica los suyos para hacer lo mismo.

Yo, solo usaría la opción 1 si es posible (soy intrínsecamente flojo :-). Si vas a escribir una herramienta para competir con Purge (y esto será difícil dado que es gratis), la opción 2 es probablemente la mejor opción.


¿No estaría interesado en desactivar el caché para un archivo? Dependiendo de lo que trates de lograr, podría ser una alternativa. Buen resumen aquí .

El UBC se puede borrar ejecutando ''purgar'', que asigna mucha memoria para forzar el borrado de la caché.

fcntl(fd, F_GLOBAL_NOCACHE, 1)

se puede usar para desactivar el almacenamiento en caché de un archivo en particular. Esto se puede hacer en cualquier proceso y el archivo se puede cerrar después.


Parece que:

Puede usar usr / bin / purge (tipo purgar en el terminal) para purgar el caché de disco (memoria inactiva), o puede hacer muchas lecturas aleatorias desde el disco duro para hacer lo mismo .

Tomado de un comentario de las armas de los usuarios.


_utilPurgeDiskBuffers la función en cuestión ( _utilPurgeDiskBuffers ) del marco de CHUD. La función no parece ser muy compleja, pero como no soy un programador de MacOS, las importaciones y las llamadas API sys no tienen mucho sentido para mí.

Lo primero que hace la API es llamar a otra función, a saber _miscUtilsUserClientConnect_internal . Esta función parece establecer una conexión a la extensión del kernel CHUD.
Para hacer esto, llama a _getCHUDUtilsKextService que intenta localizar la extensión del kernel de CHUD al enumerar todos los kexts que usan IORegistryCreateIterator importado del kit de E / S. Después de encontrar el kext, se abre a través de _IOServiceOpen .

En este punto tenemos una conexión con el código de CHUD (al menos eso es lo que entiendo de la lista de desmontaje).

Finalmente se hace una llamada a IOConnectMethodStructureIStructureO , que creo que lleva a cabo la verdadera magia.
Sin conocer algunos detalles internos o la firma de esta función, los parámetros no tienen sentido para mí.

Aquí está el desmontaje, sin embargo:

__text:4B0157A7 lea eax, [ebp+var_1C] __text:4B0157AA mov dword ptr [esp+14h], 0 __text:4B0157B2 mov [esp+10h], eax __text:4B0157B6 mov [esp+0Ch], eax __text:4B0157BA mov dword ptr [esp+8], 0 __text:4B0157C2 mov dword ptr [esp+4], 0Eh __text:4B0157CA mov [esp], edx __text:4B0157CD call _IOConnectMethodStructureIStr

Tenga en cuenta que var_1C ha var_1C cero antes.

Con suerte, algunos de ustedes pueden tener más sentido con esas llamadas de sistema. Si quieres más información, házmelo saber.

Actualizar:
Para comenzar, solo tome el ejemplo AppleSamplePCIClient.c del kit SDK de IO. Esto hace básicamente lo que hace la aplicación de purga de las herramientas CHUD.
Lo único que tendría que cambiar son los parámetros de la llamada final _IOConnectMethodStructureIStr . Tómelos del listado de desmontaje de arriba. No puedo probar todo esto porque no tengo una Mac.