当前位置:  开发笔记 > IOS > 正文

在Mac OS X上清除缓冲区缓存

如何解决《在MacOSX上清除缓冲区缓存》经验,为你挑选了2个好方法。

有没有办法以编程方式清除Mac上的缓冲区缓存,最好是在C?

基本上,我正在寻找相当于10.5(和更高)purge命令的来源.编辑:我现在看到这是CHUD工具的一部分,因为它似乎不能直接获得源.但是,我仍然在寻找一些代码来做同样的事情.



1> newgre..:

我已经_utilPurgeDiskBuffers从CHUD框架中反汇编了question()中的函数.该函数似乎并不复杂,但由于我不是MacOS程序员,因此导入和调用sys API对我来说没有多大意义.

API所做的第一件事是调用另一个函数,即_miscUtilsUserClientConnect_internal.此函数似乎建立了与CHUD内核扩展的连接.
为此,它调用_getCHUDUtilsKextService哪些尝试通过使用IORegistryCreateIterator从I/O工具包导入的所有kexts来枚举CHUD内核扩展.找到kext后,通过它打开_IOServiceOpen.

此时我们连接到CHUD kext(至少这是我对反汇编列表的理解).

最后打了一个电话IOConnectMethodStructureIStructureO,我想这真的是魔术.
在不知道某些内部细节或此功能的签名的情况下,参数对我来说没有意义.

不过这是反汇编:

__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

注意var_1C之前已经归零了.

希望你们中的一些人可以从这些系统调用中更有意义.如果您想了解更多信息,请与我们联系.

更新:
为了帮助您入门,请AppleSamplePCIClient.c从IO工具包SDK中获取示例.这基本上与CHUD工具的清除应用程序有关.
您唯一需要更改的是最终_IOConnectMethodStructureIStr调用的参数.从上面的反汇编列表中获取它们.因为我没有Mac,所以无法测试所有这些东西.



2> lpfavreau..:

看起来:

您可以使用usr/bin/purge(在终端中键入purge)来刷新磁盘缓存(非活动内存),或者您可以从硬盘执行许多随机读取来执行相同的操作.

取自用户枪的评论.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有